本章使用OpenHarmony screenshot的截屏功能,因?yàn)榇私仄翙?quán)限是系統(tǒng)權(quán)限,所以需要配置Sdk里的權(quán)限以方便安裝hap。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):???
??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??
??https://ost.51cto.com??
之前的章節(jié)我們是用fa模式編寫(xiě)的hap,這次我們采用stage模式創(chuàng)建HAP。
注意:本章使用OpenHarmony screenshot的截屏功能,因?yàn)榇私仄翙?quán)限是系統(tǒng)權(quán)限,所以需要配置sdk里的權(quán)限以方便安裝hap。
簡(jiǎn)介
仍然使用的是Dev-Eco Studio3.0 , 編寫(xiě)的環(huán)境配置嘗試變?yōu)?SDK9,Model為Stage。

程序結(jié)構(gòu)
MyApplication\entry\src\main
.
├─ets
│ ├─Application
│ ├─Component
│ ├─controller
│ ├─MainAbility
│ ├─model
│ ├─pages
│ │ ├─index.ets
│ │ ├─benchmarkTest.ets
│ │ └─subManualApiTest
│ ├─res
│ │ └─image
│ └─Utils
├─resources
│ ├─base
│ │ ├─element
│ │ ├─media
│ │ └─profile
│ └─rawfile
└─module.json5
補(bǔ)充
與SDK8相比,目錄結(jié)構(gòu)發(fā)生了一些改變。如:新加了Application文件夾,改變了MainAbility的目錄層級(jí),原本的config.json變成了module.json5,添加了AppScope文件夾 等 。
因此添加page的位置變?yōu)椋?/p>
module.json5中的 "pages": "$profile:main_pages",
位置為:src/main/resources/base/profile/main_ pages.json 。
src/main/resources/base/profile/main_pages.json
{"src": ["pages/index","pages/benchmarkTest",
...
]}
修改bundleName的位置為:MyApplication23\AppScope\app.json5。
{"app": {
"bundleName": "ohos.samples.myapplication",
"vendor": "example",
"versionCode": 1000000,
"versionName": "1.0.0",
"icon": "$media:app_icon",
"label": "$string:app_name",
"distributedNotificationEnabled": true}}
性能測(cè)試
這里的性能測(cè)試主要為了在調(diào)用函數(shù)接口時(shí),了解其在調(diào)用時(shí)的所花費(fèi)的時(shí)間,可以傳輸?shù)臄?shù)據(jù)大小。因此編寫(xiě)了相關(guān)的時(shí)間性能測(cè)試,穩(wěn)定性能測(cè)試(避免時(shí)間出現(xiàn)偶然性)和帶寬測(cè)試。
時(shí)間性能測(cè)試:
function test(func) {
let start = new Date().getTime(); //起始時(shí)間
func(); //執(zhí)行待測(cè)函數(shù)
let end = new Date().getTime(); //接受時(shí)間
console.log("開(kāi)始:", Number(start), "ms")
console.log("結(jié)束:", Number(end), "ms")
console.log("花費(fèi):", Number(end - start), "ms")
let message = ""
message += "花費(fèi):" + Number(end - start) + "ms" + "\n"
message += "開(kāi)始:" + Number(start) + "ms; " + "結(jié)束:" + Number(end) + "ms" + "\n"
return message //返回函數(shù)執(zhí)行需要時(shí)間
}
添加截屏功能

本地d.ts 路徑:C:\Users\xxx\AppData\Local\OpenHarmony\Sdk\ets\3.2.7.5\api\
開(kāi)源鴻蒙系統(tǒng)源碼文件所在位置: oh32/interface/sdk-js/api/@ohos.screenshot.d.ts ,將該文件拷至本地路徑下
MyApplication23\entry\src\main\module.json5
...
"requestPermissions": [
{
"name": "ohos.permission.CAPTURE_SCREEN"
},
{
"name": "ohos.permission.WRITE_MEDIA"
},
{
"name": "ohos.permission.READ_MEDIA"
}
]
- 這時(shí)因?yàn)闄?quán)限問(wèn)題,在安裝時(shí)會(huì)報(bào)錯(cuò):提示:Failed due to grant request permissions failed。從錯(cuò)誤日志上看安裝失敗原因:由于授予請(qǐng)求權(quán)限失敗,安裝失敗。
- 知道是權(quán)限問(wèn)題,現(xiàn)在要確認(rèn)是那些權(quán)限導(dǎo)致,OpenHarmony中涉及的權(quán)限等級(jí)你可以參看:??查看申請(qǐng)權(quán)限的等級(jí)??,文檔中列舉出了目前OpenHarmony所有的權(quán)限和權(quán)限等級(jí)。
{
"name": "ohos.permission.CAPTURE_SCREEN",
"grantMode": "system_grant",
"availableLevel": "system_core",
"provisionEnable": true,
"distributedSceneEnable": false
},
{
"name": "ohos.permission.WRITE_MEDIA",
"grantMode": "user_grant",
"availableLevel": "normal",
"provisionEnable": true,
"distributedSceneEnable": true,
"label": "$string:ohos_lab_write_media",
"description": "$string:ohos_desc_write_media"
},
{
"name": "ohos.permission.READ_MEDIA",
"grantMode": "user_grant",
"availableLevel": "normal",
"provisionEnable": true,
"distributedSceneEnable": true,
"label": "$string:ohos_lab_read_media",
"description": "$string:ohos_desc_read_media"
},
- 如果權(quán)限的等級(jí)值為: availableLevel: “system_core”/“system_basic”,則需要在UnsgnedReleasedProfileTemplate.json 配置alcs字段,將需要的高等級(jí)權(quán)限放在acls中,具體做法如下:
- 配置簽名。
路徑為:
"C:\Users\xxx\AppData\Local\OpenHarmony\Sdk\toolchains\3.2.7.5\lib\UnsgnedReleasedProfileTemplate.json"

保存后更新自動(dòng)簽名即可。

測(cè)試結(jié)果

- 本地發(fā)送文件到開(kāi)發(fā)板可以通過(guò)如下命令實(shí)現(xiàn)。
hdc_std file send 本地文件 開(kāi)發(fā)板目標(biāo)路徑
hdc_std file recv 開(kāi)發(fā)板文件 本地目標(biāo)路徑
總結(jié)
OpenHarmony的藍(lán)牙功能通過(guò)測(cè)試速度還是很快的,希望此應(yīng)用對(duì)社區(qū)朋友有幫助。
??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):???
??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??
??https://ost.51cto.com??。