版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章Openharmony基礎(chǔ)知識(shí)OpenHarmony技術(shù)架構(gòu)OpenHarmony整體遵從分層設(shè)計(jì),從下向上依次為:內(nèi)核層、系統(tǒng)服務(wù)層、框架層和應(yīng)用層。系統(tǒng)功能按照“系統(tǒng)→子系統(tǒng)→組件”逐級(jí)展開(kāi),在多設(shè)備部署場(chǎng)景下,支持根據(jù)實(shí)際需求裁剪某些非必要的組件。
OpenHarmony支持的系統(tǒng)類型1.輕量系統(tǒng)(minisystem)輕量系統(tǒng)面向MCU類處理器的設(shè)備,硬件資源極其有限,支持的設(shè)備最小內(nèi)存為128KB2.小型系統(tǒng)(smallsystem)小型系統(tǒng)面向應(yīng)用處理器支持的設(shè)備最小內(nèi)存為1MB,3.標(biāo)準(zhǔn)系統(tǒng)(standardsystem)標(biāo)準(zhǔn)系統(tǒng)面向應(yīng)用處理器支持的設(shè)備最小內(nèi)存為128MB,OpenHarmony的子系統(tǒng)OpenHarmony的子系統(tǒng)是一個(gè)邏輯概念,它具體由對(duì)應(yīng)的組件構(gòu)成。對(duì)子系統(tǒng)的進(jìn)一步拆分,可復(fù)用的軟件單元,它包含源碼、配置文件、資源文件和編譯腳本;能獨(dú)立構(gòu)建,以二進(jìn)制方式集成,具備獨(dú)立驗(yàn)證能力的二進(jìn)制單元。OpenHarmony的子系統(tǒng)OpenHarmony的子系統(tǒng)是一個(gè)邏輯概念,它具體由對(duì)應(yīng)的組件構(gòu)成。對(duì)子系統(tǒng)的進(jìn)一步拆分,可復(fù)用的軟件單元,它包含源碼、配置文件、資源文件和編譯腳本;能獨(dú)立構(gòu)建,以二進(jìn)制方式集成,具備獨(dú)立驗(yàn)證能力的二進(jìn)制單元。OpenHarmony的子系統(tǒng)OpenHarmony的子系統(tǒng)是一個(gè)邏輯概念,它具體由對(duì)應(yīng)的組件構(gòu)成。對(duì)子系統(tǒng)的進(jìn)一步拆分,可復(fù)用的軟件單元,它包含源碼、配置文件、資源文件和編譯腳本;能獨(dú)立構(gòu)建,以二進(jìn)制方式集成,具備獨(dú)立驗(yàn)證能力的二進(jìn)制單元。OpenHarmony的子系統(tǒng)OpenHarmony的子系統(tǒng)是一個(gè)邏輯概念,它具體由對(duì)應(yīng)的組件構(gòu)成。對(duì)子系統(tǒng)的進(jìn)一步拆分,可復(fù)用的軟件單元,它包含源碼、配置文件、資源文件和編譯腳本;能獨(dú)立構(gòu)建,以二進(jìn)制方式集成,具備獨(dú)立驗(yàn)證能力的二進(jìn)制單元。OpenHarmony源碼目錄結(jié)構(gòu)OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的內(nèi)核OpenHarmony采用了多內(nèi)核結(jié)構(gòu),支持Linux和LiteOS,開(kāi)發(fā)者可按不同產(chǎn)品規(guī)格進(jìn)行選擇使用。Linux和LiteOS均具備上述組成單元,只是實(shí)現(xiàn)方式有所不同。多個(gè)內(nèi)核通過(guò)KAL(KernelAbstractionLayer)模塊,向上提供統(tǒng)一的標(biāo)準(zhǔn)接口。Linux內(nèi)核編譯與構(gòu)建示例本小節(jié)以SCDAAYU800開(kāi)發(fā)板+ubuntux86主機(jī)開(kāi)發(fā)環(huán)境為例介紹Linux內(nèi)核編譯與構(gòu)建方法。使用工程的全量編譯命令,編譯生成uImage內(nèi)核鏡像./build.sh--product-nameDAYU800#編譯DAYU800鏡像
--build-targetbuild_kernel#編譯DAYU800的uImage內(nèi)核鏡像
--gn-argslinux_kernel_version=\"linux-5.10\"#編譯指定內(nèi)核版本內(nèi)核增強(qiáng)特性O(shè)penHarmony針對(duì)linux內(nèi)核在ESwap(EnhancedSwap)、關(guān)聯(lián)線程組調(diào)度和CPU輕量級(jí)隔離做了增強(qiáng)。1.EnhancedSWAP特性2.關(guān)聯(lián)線程組調(diào)度3.CPU輕量級(jí)隔離OpenHarmony應(yīng)用開(kāi)發(fā)基本概念:UI框架OpenHarmony提供了一套UI開(kāi)發(fā)框架,即方舟開(kāi)發(fā)框架(ArkUI框架)。方舟開(kāi)發(fā)框架可為開(kāi)發(fā)者提供應(yīng)用UI開(kāi)發(fā)所必需的能力,比如多種組件、布局計(jì)算、動(dòng)畫(huà)能力、UI交互、繪制等。OpenHarmony應(yīng)用開(kāi)發(fā)基本概念:應(yīng)用模型應(yīng)用模型是OpenHarmony為開(kāi)發(fā)者提供的應(yīng)用程序所需能力的抽象提煉,它提供了應(yīng)用程序必備的組件和運(yùn)行機(jī)制。有了應(yīng)用模型,開(kāi)發(fā)者可以基于一套統(tǒng)一的模型進(jìn)行應(yīng)用開(kāi)發(fā),使應(yīng)用開(kāi)發(fā)更簡(jiǎn)單、高效。應(yīng)用模型的構(gòu)成要素包括:1)應(yīng)用組件應(yīng)用組件是應(yīng)用的基本組成單位,是應(yīng)用的運(yùn)行入口。2)應(yīng)用進(jìn)程模型應(yīng)用進(jìn)程模型定義應(yīng)用進(jìn)程的創(chuàng)建和銷毀方式,以及進(jìn)程間的通信方式。3)應(yīng)用線程模型應(yīng)用線程模型定義應(yīng)用進(jìn)程內(nèi)線程的創(chuàng)建和銷毀方式、主線程和UI線程的創(chuàng)建方式、線程間的通信方式。4)應(yīng)用任務(wù)管理模型(僅對(duì)系統(tǒng)應(yīng)用開(kāi)放)應(yīng)用任務(wù)管理模型定義任務(wù)(Mission)的創(chuàng)建和銷毀方式,以及任務(wù)與組件間的關(guān)系。5)應(yīng)用配置文件應(yīng)用配置文件中包含應(yīng)用配置信息、應(yīng)用組件信息、權(quán)限信息、開(kāi)發(fā)者自定義信息等,這些信息在編譯構(gòu)建、分發(fā)和運(yùn)行階段分別提供給編譯工具、應(yīng)用市場(chǎng)和操作系統(tǒng)使用。隨著系統(tǒng)的演進(jìn)發(fā)展,OpenHarmony先后提供了兩種應(yīng)用模型:Stage模型:OpenHarmonyAPI9開(kāi)始新增的模型,是目前主推且會(huì)長(zhǎng)期演進(jìn)的模型。在該模型中,由于提供了AbilityStage、WindowStage等類作為應(yīng)用組件和Window窗口的“舞臺(tái)”,因此稱這種應(yīng)用模型為Stage模型。FA(FeatureAbility)模型:OpenHarmonyAPI7開(kāi)始支持的模型,已經(jīng)不再主推。OpenHarmony應(yīng)用開(kāi)發(fā)基本概念:ModuleModule按照使用場(chǎng)景可以分為兩種類型:(1)Ability類型的Module:用于實(shí)現(xiàn)應(yīng)用的功能和特性。每一個(gè)Ability類型的Module編譯后,會(huì)生成一個(gè)以.hap為后綴的文件,其被定義為HAP(HarmonyAbilityPackage)包。具體包含如下兩種類型。entry類型的Module。feature類型的Module。(2)Library類型的Module:用于實(shí)現(xiàn)代碼和資源的共享。Library類型的Module分為Static和Shared兩種類型,編譯后會(huì)生成共享包。StaticLibrary:靜態(tài)共享庫(kù)。編譯后會(huì)生成一個(gè)以.har為后綴的文件,即靜態(tài)共享包HAR(HarmonyArchive)。SharedLibrary:動(dòng)態(tài)共享庫(kù)。編譯后會(huì)生成一個(gè)以.hsp為后綴的文件,即動(dòng)態(tài)共享包HSP(HarmonySharedPackage)。為了表述方便,通常認(rèn)為SharedLibrary編譯后生成HSP。Stage模型開(kāi)發(fā)態(tài)應(yīng)用程序包結(jié)構(gòu)編譯態(tài)包結(jié)構(gòu)發(fā)布態(tài)包結(jié)構(gòu)HAP、HAR、HSP三者的功能和使用場(chǎng)景總結(jié)OpenHarmony設(shè)備端開(kāi)發(fā)方式應(yīng)用端開(kāi)發(fā)第一個(gè)程序“HelloWorld”學(xué)習(xí)資料推薦Gitee:/openharmonyOpenHarmony官網(wǎng):/mainPlayHarmonyOS官網(wǎng):/Codelabs:/openharmony/codelabs/OpenHarmony知識(shí)體系:/openharmony-sig/knowledge書(shū)籍:王劍編著GiteeOpenHarmony官網(wǎng)HarmonyOS官網(wǎng)CodelabsOpenHarmony知識(shí)體系第3章潤(rùn)開(kāi)鴻鴻銳開(kāi)發(fā)板(SCDAYU800A)介紹潤(rùn)開(kāi)鴻鴻銳開(kāi)發(fā)板(SCDAYU800A)硬件介紹潤(rùn)開(kāi)鴻鴻銳開(kāi)發(fā)板(SCDAYU800A)是一款具備平頭哥高性能RISC-V開(kāi)源架構(gòu)曳影1520(TH1520)芯片的開(kāi)發(fā)板,它集成了4核玄鐵C910處理器(RISC-V架構(gòu))的平頭哥曳影1520(TH1520)芯片,AI算力達(dá)4TOPs(TeraOperationsPerSecond,每秒萬(wàn)億次操作),可用于工控平板、智慧大屏、智能NVR、信息發(fā)布系統(tǒng)、云終端、車載中控等場(chǎng)景,支持醫(yī)療成像、視頻會(huì)議、家用機(jī)器人和無(wú)人機(jī)等中高端應(yīng)用,廣泛用于邊緣計(jì)算、人工智能、圖像識(shí)別、多媒體等領(lǐng)域。Linux概述常見(jiàn)Linux發(fā)行版本Linux介紹-文件類型介紹相比較于Windows系統(tǒng)文件類型通過(guò)后綴名進(jìn)行識(shí)別,Linux中文件類型則是通過(guò)文件屬性進(jìn)行判斷,在Linux中文件類型總共有七種。文件類型flag創(chuàng)建方式普通文件-toucha.txt目錄文件dmkdira鏈接文件lln-s./b.txta.txt&ln./b.txta.txt塊設(shè)備文件b-字符設(shè)備文件c-管道文件pmkfifofifo_file套接字文件s-Linux介紹-man手冊(cè)功能使用介紹man手冊(cè)總過(guò)有9章節(jié),各個(gè)章節(jié)含義如下sectiondescription備注1Executableprogramsorshellcommands可運(yùn)行的指令或可執(zhí)行文件的幫助文檔2Systemcalls(functionsprovidedbythekernel)系統(tǒng)核心可使用的函數(shù)與工具等的幫助文檔3Librarycalls(functionswithinprogramlibraries)一些常用的函數(shù)與庫(kù)的幫助文檔4Specialfiles(usuallyfoundin/dev)設(shè)備文件的說(shuō)明5Fileformatsandconventions,e.g./etc/passwd配置文件或者是某些文件的格式說(shuō)明6Games游戲程序的幫助文檔7Miscellaneous(includingmacropackagesandconventions),e.g.man(7),groff(7)慣例與協(xié)議,如文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議等的說(shuō)明8Systemadministrationcommands(usuallyonlyforroot)系統(tǒng)管理員可用的管理命令的幫助文檔9Kernelroutines[Nonstandard]跟系統(tǒng)核心有關(guān)的文件的幫助文檔Linux介紹-man手冊(cè)功能使用介紹man命令界面的字段說(shuō)明字段描述NAME這個(gè)命令(程序)的名稱和簡(jiǎn)單用途的說(shuō)明SYNOPSIS命令(程序)語(yǔ)法DESCRIPTION命令(程序)詳細(xì)說(shuō)明,包括選項(xiàng)與參數(shù)的用法AUTHOR命令(程序)的作者REPORTINGBUGS如果發(fā)現(xiàn)bug可以聯(lián)系的電子郵件COPYRIGHT命令(程序)版權(quán)協(xié)議SEEALSO還可以參考哪些文檔Linux介紹-常用命令功能介紹文件操作類常用的命令命令描述常用使用方法cd切換工作目錄進(jìn)入~目錄:cd進(jìn)入上次的目錄:cd-進(jìn)入指定的目錄:cd[directory]mkdir創(chuàng)建目錄創(chuàng)建目錄:mkdirdirectory創(chuàng)建子目錄:mkdir-pparent/children創(chuàng)建目錄同時(shí)指定權(quán)限:mkdir-mmodedirectorytouch創(chuàng)建文件創(chuàng)建文件:touchfilels/ll查看目錄文件查看目錄文件:ls查看所有文件,包括隱藏文件:ls-a查看并列出文件全屬性:ls-l/ll查看并列出文件全屬性同時(shí)按照K/M/G顯示大小:ls-lh/ll-hrmdir刪除空目錄(不常用)刪除空目錄:rmdirdirrm刪除文件刪除文件:rmfile強(qiáng)制刪除目錄:rmdir-rfln創(chuàng)建鏈接文件創(chuàng)建硬鏈接:lnfile1file2創(chuàng)建軟鏈接:ln-sfile1file2cp拷貝文件并重命名文件/目錄移動(dòng)文件:cpfile1file2移動(dòng)目錄:cp-rdir1dir2mv移動(dòng)并重命名文件/目錄移動(dòng)文件:mvfile1file2tar壓縮/解壓縮文件打包文件:tar-cffile.tarfile打包并調(diào)用gzip壓縮文件:tar-czvffile.tarfile解壓縮包:tar-xvffile.tar.gzfind查找文件按文件名查找:find./-namefile*grep查找字符串(后面有詳細(xì)專題)查找字符串:grep-rnstring查找單詞:grep-rnwwordcat查看小文件查看文件:catfile查看文件并顯示行號(hào):cat-nfileless查看大文件查看文件(空格翻頁(yè)):lessfilemore查看大文件查看文件(空格翻頁(yè)):morefilehead查看文件頭n行查看文件頭n行:head[n]filetail查看文件尾n行查看文件尾n行:tail[n]fileLinux介紹-常用命令功能介紹用戶、權(quán)限相關(guān)操作命令描述常用使用方法sudo使用超級(jí)用戶權(quán)限執(zhí)行命令超級(jí)用戶權(quán)限執(zhí)行命令:sudocmd切換root用戶:sudosusu切換用戶切換用戶:suuserchmod修改文件/目錄權(quán)限[r/w/x]修改權(quán)限:chmodmodefile增加權(quán)限:chmod+modefile減權(quán)限:chmod-modefilechgrp修改文件所屬群組修改群組:chgrpgroupfilechown修改文件擁有者修改擁有者:chownownerfileuseradd創(chuàng)建用戶(超級(jí)用戶權(quán)限)創(chuàng)建用戶:useradd-d/home/username-s/bin/bash-r-musernameuserdel刪除用戶(超級(jí)用戶權(quán)限)刪除用戶:userdel-rusernamepasswd為用戶設(shè)置密碼(超級(jí)用戶權(quán)限)設(shè)置密碼:passwdusernameLinux介紹-常用命令功能介紹其他常用操作命令描述常用使用方法scp遠(yuǎn)程拷貝文件遠(yuǎn)程拷貝文件:scpuser@ip:file_pathtarget_path遠(yuǎn)程拷貝目錄:scp-ruser@ip:file_pathtarget_pathreset重啟系統(tǒng)(超級(jí)用戶權(quán)限)重啟系統(tǒng):resetpoweroff關(guān)機(jī)(超級(jí)用戶權(quán)限)關(guān)機(jī):poweroffpwd查看當(dāng)前目錄的絕對(duì)路徑查看路徑:pwdwc按照\(chéng)n統(tǒng)計(jì)行數(shù)統(tǒng)計(jì)行數(shù):wc-lfileps查看當(dāng)前運(yùn)行的進(jìn)程查看進(jìn)程詳細(xì)信息:ps-Afltop動(dòng)態(tài)監(jiān)視進(jìn)程(每3秒刷新一次)動(dòng)態(tài)監(jiān)視進(jìn)程:topkill發(fā)送信號(hào)給進(jìn)程終止信號(hào):kill[-15]pid強(qiáng)制終止信號(hào):kill-9pidUbuntu20.04編譯環(huán)境配置Ubuntu一鍵初始化配置環(huán)境的工程的核心程序是自動(dòng)化配置腳本。該自動(dòng)化腳本命令如下所示。它實(shí)現(xiàn)的配置功能如圖3-6所示。apt-get-f-yinstallssh#ssh連接服務(wù)器必備,直接在本機(jī)上操作可不用提前安裝apt-get-f-yinstallnet-tools#ssh連接服務(wù)器必備,直接在本機(jī)上操作可不用提前安裝apt-get-f-yinstallgitapt-get-f-yinstalldos2unixgitclone/itopen/OpenHarmony_env_init.gitcdOpenHarmony_env_init./build.sh潤(rùn)開(kāi)鴻鴻銳開(kāi)發(fā)板(SCDAYU800A)代碼下載在完成了Ubuntu一鍵初始化配置環(huán)境之后,接下來(lái)可以進(jìn)行下載基于SCDAYU800A開(kāi)發(fā)板的OpenHarmony活躍分支代碼。本小節(jié)提供兩種下載方法。1)方法一:一鍵自動(dòng)下載gitclone/itopen/ohos_download.gitcdohos_download./ohos_download.sh#輸入所需下載的分支,例如:1.1表示要下載OpenHarmonymaster分支2)方法二:手動(dòng)下載repoinit-u/itopen/manifest.git-bOpenHarmony-3.2-Release-mdevboard_dayu800.xml--no-repo-verifyreposync-crepoforall-c'gitlfspull'repostartOpenHarmony-3.2-Release--al基于SCDAYU800A開(kāi)發(fā)板的OpenHarmony代碼編譯內(nèi)核編譯當(dāng)前采用的阿里平頭哥提供的gcc交叉編譯工具鏈(當(dāng)前保存在th1520交叉編譯工具鏈中),在代碼下載過(guò)程中已經(jīng)同步下載到OpenHarmony源碼目錄prebuilts/gcc/linux-x86/riscv中。除內(nèi)核以外的代碼編譯采用的是OpenHarmony版本自身的llvm工具鏈。這里列出核心編譯命令。#首次編譯請(qǐng)先執(zhí)行下面命令./build/prebuilts_download.sh#全量代碼編譯./build.sh--product-namedayu800--gn-argsfull_mini_debug=false--ccache#單模塊編譯#module_name舉例:"kernel:kernel",表示編譯kernel目錄下的kernel模塊,所有后面的kernel是module_name./build.sh--product-namedayu800--ccache--build-targetmodule#內(nèi)核模塊編譯./build.sh--product-namedayu800--ccache--build-targetkernel鏡像燒錄1.串口驅(qū)動(dòng)安裝安裝thead/flash_tools/driver/c910_serial_driver/CDM212364_Setup目錄下的CDM212364_Setup.exe工具。該工具不支持Windows?11及后續(xù)版本。2.禁用強(qiáng)制驅(qū)動(dòng)程序簽名找到Windows?10的設(shè)置,單擊“設(shè)置”按鈕。單擊“更新和安全”按鈕,然后單擊“恢復(fù)”按鈕,并在右邊單擊高級(jí)啟動(dòng)下面的“重新啟動(dòng)”按鈕。重啟之后會(huì)出現(xiàn)幾個(gè)選項(xiàng),單擊“疑難解答”按鈕,然后單擊“高級(jí)選項(xiàng)”按鈕,然后選擇“啟動(dòng)設(shè)置”按鈕,單擊“重啟”按鈕,然后會(huì)跳出一個(gè)列表,直接輸入7,選擇禁用驅(qū)動(dòng)程序強(qiáng)制簽名,重啟之后,后續(xù)驅(qū)動(dòng)就可以成功安裝了。3.fastboot驅(qū)動(dòng)安裝如圖3-13所示先按住BOOT鍵不松,再按RESET鍵,然后先松開(kāi)RESET鍵,再松開(kāi)BOOT鍵。在win10中打開(kāi)“設(shè)備管理器”出現(xiàn)“USBdownloadgadget”設(shè)備,右鍵安裝驅(qū)動(dòng),單擊“更新驅(qū)動(dòng)程序”,選擇“瀏覽計(jì)算機(jī)以查找驅(qū)動(dòng)程序”,選擇thead/flash_tools/driver/fastboot_driver/usb_driver-fullmask目錄,單擊“下一步”按鈕,選擇“始終安裝此驅(qū)動(dòng)程序軟件”,驅(qū)動(dòng)完成安裝后單擊“關(guān)閉”按鈕,鏡像燒錄4.fastboot命令安裝SCDAYU800A開(kāi)發(fā)板燒錄鏡像將flash_tools/flash_img目錄復(fù)制到Windows10的磁盤下,建議直接放在磁盤的根目錄下,不得放在中文文件夾的目錄下。將編譯成功的out/dayu800/packages/phone/images目錄下所有鏡像直接復(fù)制到flash_image/images內(nèi)。然后將串口線和USB線都接到電腦然后一直按住開(kāi)發(fā)板的BOOT鍵,再一直按RESET鍵,然后先松開(kāi)RESET鍵,再松開(kāi)BOOT鍵。當(dāng)串口中打印如圖3-21所示"[APP][E]protocol_connectfailed,exit."的信息時(shí)運(yùn)行flash_img中的flash_img.bat。當(dāng)flash_img.bat運(yùn)行結(jié)束時(shí)關(guān)閉flash_img.bat窗口,按復(fù)位鍵即可啟動(dòng)剛剛燒錄鏡像的系統(tǒng)?!癝CDAYU800A+OpenHarmony”交叉編譯工具鏈1.工具鏈重新構(gòu)建方案1)工具鏈下載使用3.2.2節(jié)的自動(dòng)化下載腳本,選擇4.1下載即可。2)工具鏈代碼修改將下面的代碼復(fù)制到文件~/llvm.patch中保存,然后進(jìn)?toolchain/llvm-project下執(zhí)行如下命令將patch打入即可。patch-p1<~/llvm.patch3)工具鏈編譯#創(chuàng)建python3虛擬環(huán)境pip3installvirtualenvvirtualenvenvsourceenv/bin/activate#安裝對(duì)應(yīng)的依賴庫(kù)python3-mpipinstallpyyamlpip3install-USphinx-i/pypi/simplepip3installrecommonmark-i/pypi/simple#編譯?具鏈bash./toolchain/llvm-project/llvm-build/env_prepare.shpython3./toolchain/llvm-project/llvm-build/build.py--no-buildwindows2.已編譯工具鏈獲取當(dāng)前在3.2.2節(jié)下載的源碼使用的工具鏈?zhǔn)且呀?jīng)編譯好的,在下載代碼的時(shí)候也同步的會(huì)將構(gòu)建好的工具鏈替換官方的工具鏈。工具鏈下載命令如下。gitclone/riscv-sig/llvm-toolchains.git-bOpenHarmony-v4.1-Release“SCDAYU800A+OpenHarmony”交叉編譯工具鏈3.4.2RISC-V架構(gòu)的rustc工具鏈構(gòu)建Rust是一種注重安全性、并發(fā)性和性能的系統(tǒng)編程語(yǔ)言。rustc是Rust編程語(yǔ)言的編譯器,它用于將Rust源代碼編譯成可執(zhí)行文件或其他類型的輸出(如庫(kù)文件)。rustc工具鏈官方版本不支持RISC-V,因此這里構(gòu)建了?個(gè)支持RISC-V架構(gòu)的工具鏈,在下載OpenHarmony代碼的時(shí)候會(huì)同步下載到代碼中。單獨(dú)工具鏈下載命令如下所示。gitclone/riscv-sig/rustc.git-bOpenHarmony-v4.1-Release3.4.3內(nèi)核工具鏈當(dāng)前內(nèi)核采用的是阿里平頭哥提供的gcc工具鏈,在下載代碼的時(shí)候會(huì)同步下載到代碼中。單獨(dú)工具鏈下載命令如下所示。gitclone/riscv-sig/riscv64-gcc.git-bOpenHarmony-v4.1-Release第4章OpenHarmony開(kāi)發(fā)實(shí)踐基礎(chǔ)OpenHarmony設(shè)備端基礎(chǔ)環(huán)境搭建圖4-1OpenHarmony設(shè)備開(kāi)發(fā)的兩種工作流程配置Samba服務(wù)器在Ubuntu環(huán)境下進(jìn)行以下操作:(1)安裝Samba軟件包。sudoapt-getinstallsambasamba-common(2)修改Samba配置文件,配置共享信息。打開(kāi)配置文件:sudogedit/etc/samba/smb.conf在配置文件末尾添加以下配置信息(根據(jù)實(shí)際需要配置相關(guān)內(nèi)容):[home]#在Windows中映射的根文件夾名稱(此處以“home”為例)comment=SharedFolder#共享信息說(shuō)明path=/home#將home作為共享目錄validusers=xiaoming#可以訪問(wèn)該共享目錄的用戶(Ubuntu的用戶名)directorymask=0775#默認(rèn)創(chuàng)建的目錄權(quán)限createmask=0775#默認(rèn)創(chuàng)建的文件權(quán)限public=yes#是否公開(kāi)writable=yes#是否可寫available=yes#是否可獲取browseable=yes#是否可瀏覽(3)添加Samba服務(wù)器用戶和訪問(wèn)密碼。sudosmbpasswd-axiaoming#用戶名為Ubuntu用戶名。輸入命令后,根據(jù)提示設(shè)置密碼。(4)重啟Samba服務(wù)。sudoservicesmbdrestart設(shè)置Windows映射安裝庫(kù)和工具集、獲取源碼、安裝編譯工具1)安裝hb在OpenHarmony源碼根目錄運(yùn)行如下命令安裝hb并更新至最新版本。python3-mpipinstall--userbuild/hb設(shè)置環(huán)境變量。vim~/.bashrc將以下命令復(fù)制到.bashrc文件的最后一行,保存并退出。exportPATH=~/.local/bin:$PATH執(zhí)行如下命令更新環(huán)境變量。source~/.bashrc設(shè)備端開(kāi)發(fā)第一個(gè)程序“HelloWorld”設(shè)備端開(kāi)發(fā)第一個(gè)程序“HelloWorld”設(shè)備端開(kāi)發(fā)第一個(gè)程序“HelloWorld”編譯設(shè)備端開(kāi)發(fā)第一個(gè)程序“HelloWorld”Docker編譯環(huán)境燒錄和執(zhí)行OpenHarmony應(yīng)用端開(kāi)發(fā)基礎(chǔ)環(huán)境搭建(1)訪問(wèn)官方網(wǎng)站。打開(kāi)瀏覽器,訪問(wèn)華為開(kāi)發(fā)者官網(wǎng)的DevEcoStudio頁(yè)面:DevEcoStudio。(2)下載最新版本。在DevEcoStudio頁(yè)面上,找到下載按鈕并單擊,選擇適合讀者的操作系統(tǒng)的最新版本進(jìn)行下載。(3)安裝程序。Windows:下載完成后,運(yùn)行安裝程序并按照提示完成安裝。macOS:下載完成后,打開(kāi).dmg文件,并將DevEcoStudio拖入“應(yīng)用程序”文件夾。Linux:下載.tar.gz文件,解壓并運(yùn)行安裝腳本。(4)安裝依賴(Linux)。如果使用Linux則根據(jù)DevEcoStudio的要求,使用包管理器安裝所需的依賴。(5)啟動(dòng)DevEcoStudio。安裝完成后,啟動(dòng)DevEcoStudio。(6)登錄賬號(hào)。如果讀者有華為開(kāi)發(fā)者賬號(hào),可以使用賬號(hào)登錄,以便訪問(wèn)更多華為提供的服務(wù)和資源。(7)檢查更新。在DevEcoStudio中,定期檢查更新以確保使用的是最新版本。可以通過(guò)“幫助”菜單中的“檢查更新”選項(xiàng)來(lái)進(jìn)行。(8)配置環(huán)境。根據(jù)開(kāi)發(fā)需要,配置DevEcoStudio的環(huán)境設(shè)置,包括SDK路徑、插件、主題等。(9)安裝插件。在DevEcoStudio中,可能需要安裝額外的插件來(lái)擴(kuò)展功能。可以通過(guò)“擴(kuò)展”視圖來(lái)瀏覽和安裝插件。(10)查看文檔.如果需要幫助,可以查看DevEcoStudioOpenHarmony應(yīng)用端開(kāi)發(fā)基礎(chǔ)環(huán)境搭建配置HDC工具環(huán)境變量HDC_SERVER_PORT應(yīng)用端開(kāi)發(fā)第一個(gè)程序“HelloOhosWorld”應(yīng)用端開(kāi)發(fā)第一個(gè)程序“HelloOhosWorld”AppScope>app.json5:應(yīng)用的全局配置信息。entry:OpenHarmony工程模塊,編譯構(gòu)建生成一個(gè)HAP包。src>main>ets:用于存放ArkTS源碼。src>main>ets>entryability:應(yīng)用/服務(wù)的入口。src>main>ets>pages:應(yīng)用/服務(wù)包含的頁(yè)面。src>main>resources:用于存放應(yīng)用/服務(wù)所用到的資源文件,如圖形、多媒體、字符串、布局文件等。src>main>module.json5:模塊配置文件。主要包含HAP包的配置信息、應(yīng)用/服務(wù)在具體設(shè)備上的配置信息以及應(yīng)用/服務(wù)的全局配置信息。build-profile.json5:當(dāng)前的模塊信息
、編譯信息配置項(xiàng),包括buildOption、targets配置等。hvigorfile.ts:模塊級(jí)編譯構(gòu)建任務(wù)腳本,開(kāi)發(fā)者可以自定義相關(guān)任務(wù)和代碼實(shí)現(xiàn)。obfuscation-rules.txt:混淆規(guī)則文件?;煜_(kāi)啟后,在使用Release模式進(jìn)行編譯時(shí),會(huì)對(duì)代碼進(jìn)行編譯、混淆及壓縮處理,保護(hù)代碼資產(chǎn)。oh_modules:用于存放三庫(kù)依賴信息。build-profile.json5:應(yīng)用級(jí)配置信息,包括簽名signingConfigs、產(chǎn)品配置products等。hvigorfile.ts:應(yīng)用級(jí)編譯構(gòu)建任務(wù)腳本。構(gòu)建第一個(gè)頁(yè)面構(gòu)建第二個(gè)頁(yè)面實(shí)現(xiàn)頁(yè)面間的跳轉(zhuǎn)實(shí)現(xiàn)頁(yè)面間的跳轉(zhuǎn)使用開(kāi)發(fā)板運(yùn)行應(yīng)用應(yīng)用端開(kāi)發(fā)第一個(gè)程序“HelloWorld”調(diào)試工具調(diào)試工具打包工具1.HAP打包指令開(kāi)發(fā)者可以使用打包工具對(duì)模塊進(jìn)行打包,通過(guò)傳入打包選項(xiàng)、文件路徑,生成所需的HAP包。示例4-13:Stage模型示例:java-jarapp_packing_tool.jar--modehap--json-path<option>--resources-path2.HSP打包指令HSP包實(shí)現(xiàn)了多個(gè)HAP對(duì)文件的共享,開(kāi)發(fā)者可以使用打包工具對(duì)應(yīng)用進(jìn)行打包,通過(guò)傳入打包選項(xiàng)、文件路徑,生成所需的HSP包。示例4-14:HSP打包指令。java-jarpath\app_packing_tool.jar--modehsp--json-path<option>--resources-path<option>--ets-path<option>--index-path<option>--pack-info-path<option>--out-pathpath\out\library.hsp--forcetrue3.App打包指令開(kāi)發(fā)者可以使用打包工具對(duì)應(yīng)用進(jìn)行打包,通過(guò)傳入打包選項(xiàng)、文件路徑,生成所需的App包。App包用于上架應(yīng)用市場(chǎng)。示例4-15:App打包指令java-jarapp_packing_tool.jar--modeapp--hap-path<option>--hsp-path<option>--out-path<option>--signature-path[option]--certificate-path[option]--pack-info-path[option]--force[option]Stage模型下的應(yīng)用配置文件Stage模型下的應(yīng)用配置文件資源分類與訪問(wèn)4.7.1資源分類1.資源目錄1)base目錄base目錄是默認(rèn)存在的目錄,二級(jí)子目錄element用于存放字符串、顏色、布爾值等基礎(chǔ)元素,media、profile存放媒體、動(dòng)畫(huà)、布局等資源文件。2)限定詞目錄en_US和zh_CN是默認(rèn)存在的兩個(gè)限定詞目錄,其余限定詞目錄需要開(kāi)發(fā)者根據(jù)開(kāi)發(fā)需要自行創(chuàng)建。二級(jí)子目錄element、media、profile用于存放字符串、顏色、布爾值等基礎(chǔ)元素,以及媒體、動(dòng)畫(huà)、布局等資源文件。3)rawfile目錄支持創(chuàng)建多層子目錄,子目錄名稱可以自定義,文件夾內(nèi)可以自由放置各類資源文件。4)resfile目錄支持創(chuàng)建多層子目錄,子目錄名稱可以自定義,文件夾內(nèi)可以自由放置各類資源文件。2.資源組目錄資源組目錄包括element、media、profile三種類型的資源文件,用于存放特定類型資源。element表示元素資源,以下每一類數(shù)據(jù)都采用相應(yīng)的JSON文件來(lái)表征(目錄下僅支持文件類型)。-boolean,布爾型-color,顏色-float,浮點(diǎn)型,范圍是-2^128-2^128-intarray,整型數(shù)組-integer,整型,范圍是-2^31-2^31-1-pattern,樣式(僅支持系統(tǒng)應(yīng)用使用)-plural,復(fù)數(shù)形式-strarray,字符串?dāng)?shù)組-string,字符串,格式化字符串請(qǐng)參考API文檔-theme,主題(僅支持系統(tǒng)應(yīng)用使用)。media表示媒體資源,包括圖片、音頻、視頻等非文本格式的文件(目錄下只支持文件類型)。profile表示自定義配置文件,其文件內(nèi)容可通過(guò)包管理接口獲取(目錄下只支持json文件類型)。資源分類與訪問(wèn)2.
跨HAP/HSP包應(yīng)用資源1)bundle不同,跨bundle訪問(wèn)(僅支持系統(tǒng)應(yīng)用使用)通過(guò)createModuleContext(bundleName,moduleName)接口創(chuàng)建對(duì)應(yīng)HAP/HSP包的上下文,獲取resourceManager對(duì)象后,調(diào)用不同資源管理接口訪問(wèn)不同資源。2)bundle相同,跨module訪問(wèn)(1)通過(guò)createModuleContext(moduleName)接口創(chuàng)建同應(yīng)用中不同module的上下文,獲取resourceManager對(duì)象后,調(diào)用不同接口訪問(wèn)不同資源。(2)通過(guò)"$r"或"$rawfile"引用資源。具體操作如下:這里是列表文本[hsp].獲取資源。其中,hsp為hsp模塊名,type為資源類型,name為資源名稱。4.7.2資源訪問(wèn)1.單HAP包應(yīng)用資源1)通過(guò)"$r"或"$rawfile"引用資源。對(duì)于“color”“float”“string”“plural”“media”“profile”等類型的資源,通過(guò)"$r('')"形式引用。其中,app為resources目錄中定義的資源;type為資源類型或資源的存放位置;name為資源名,開(kāi)發(fā)者定義資源時(shí)確定。對(duì)于string.json中使用多個(gè)占位符的情況,通過(guò)$r('app.string.label','aaa','bbb',444)形式引用。對(duì)于rawfile目錄資源,通過(guò)"$rawfile('filename')"形式引用。其中,filename為rawfile目錄下文件的相對(duì)路徑,文件名需要包含后綴,路徑開(kāi)頭不可以"/"開(kāi)頭。2)通過(guò)本應(yīng)用上下文獲取ResourceManager后,調(diào)用不同資源管理接口訪問(wèn)不同資源。第6章程序框架服務(wù)和方舟UI框架程序框架服務(wù)AbilityKit程序框架服務(wù)使用場(chǎng)景眾多,可包括:(1)應(yīng)用的多Module開(kāi)發(fā):應(yīng)用可通過(guò)不同類型的Module(HAP、HAR、HSP)來(lái)實(shí)現(xiàn)應(yīng)用的功能開(kāi)發(fā)。其中,HAP用于實(shí)現(xiàn)應(yīng)用的功能和特性,HAR與HSP用于實(shí)現(xiàn)代碼和資源的共享。(2)應(yīng)用內(nèi)的交互:應(yīng)用內(nèi)的不同組件之間可以相互跳轉(zhuǎn)。比如,在支付應(yīng)用中,通過(guò)入口UIAbility組件啟動(dòng)收付款UIAbility組件。(3)應(yīng)用間的交互:當(dāng)前應(yīng)用可以啟動(dòng)其他應(yīng)用,來(lái)完成某個(gè)任務(wù)或操作。比如,啟動(dòng)瀏覽器應(yīng)用來(lái)打開(kāi)網(wǎng)站、啟動(dòng)文件應(yīng)用來(lái)瀏覽或編輯文件等。(4)應(yīng)用的跨設(shè)備流轉(zhuǎn):通過(guò)應(yīng)用的跨端遷移和多端協(xié)同,獲得更好的使用體驗(yàn)。比如,在平板上播放的視頻,遷移到智慧屏繼續(xù)播放。在上述這些使用場(chǎng)景中,程序框架服務(wù)具備如下功能:(1)提供應(yīng)用進(jìn)程創(chuàng)建和銷毀、應(yīng)用生命周期調(diào)度能力。(2)提供應(yīng)用組件運(yùn)行入口、應(yīng)用組件生命周期調(diào)度、組件間交互等能力。(3)提供應(yīng)用上下文環(huán)境、系統(tǒng)環(huán)境變化監(jiān)聽(tīng)等能力。(4)提供應(yīng)用流轉(zhuǎn)能力。(5)提供多包機(jī)制、共享包、應(yīng)用信息配置等能力。(6)提供程序訪問(wèn)控制能力,詳見(jiàn)訪問(wèn)控制概述。Stage模型開(kāi)發(fā)概述Stage模型提供UIAbility和ExtensionAbility兩種類型的組件,這兩種組件都有具體的類承載,支持面向?qū)ο蟮拈_(kāi)發(fā)方式。每個(gè)UIAbility實(shí)例都會(huì)與一個(gè)WindowStage類實(shí)例綁定,該類起到了應(yīng)用進(jìn)程內(nèi)窗口管理器的作用。在Stage模型上,Context及其派生類向開(kāi)發(fā)者提供在運(yùn)行期可以調(diào)用的各種資源和能力。每個(gè)Entry類型或者Feature類型的HAP在運(yùn)行期都有一個(gè)AbilityStage類實(shí)例Stage應(yīng)用組件UIAbility組件UIAbility組件是一種包含UI的應(yīng)用組件,主要用于和用戶交互。UIAbility組件是系統(tǒng)調(diào)度的基本單元,為應(yīng)用提供繪制界面的窗口。一個(gè)應(yīng)用可以包含一個(gè)或多個(gè)UIAbility組件。圖6-2UIAbility生命周期狀態(tài)UIAbility的啟動(dòng)模式是指UIAbility實(shí)例在啟動(dòng)時(shí)的不同呈現(xiàn)狀態(tài)。針對(duì)不同的業(yè)務(wù)場(chǎng)景,系統(tǒng)提供了三種啟動(dòng)模式:singleton(單實(shí)例模式)、multiton(多實(shí)例模式)和specified(指定實(shí)例模式)。UIAbility組件的基本用法包括:指定UIAbility的啟動(dòng)頁(yè)面以及獲取UIAbility的上下文UIAbilityContext。組件與UI的數(shù)據(jù)同步:使用EventHub進(jìn)行數(shù)據(jù)通信和使用AppStorage/LocalStorage進(jìn)行數(shù)據(jù)同步ExtensionAbility組件圖6-3使用InputMethodExtensionAbility組件AbilityStage組件容器AbilityStage是一個(gè)Module級(jí)別的組件容器,應(yīng)用的HAP在首次加載時(shí)會(huì)創(chuàng)建一個(gè)AbilityStage實(shí)例,可以對(duì)該Module進(jìn)行初始化等操作。AbilityStage與Module一一對(duì)應(yīng),即一個(gè)Module擁有一個(gè)AbilityStage。DevEcoStudio默認(rèn)工程中未自動(dòng)生成AbilityStage,如需要使用AbilityStage的能力,可以手動(dòng)新建一個(gè)AbilityStage文件,具體步驟如下。(1)在工程Module對(duì)應(yīng)的ets目錄下,右鍵選擇“New>Directory”,新建一個(gè)目錄并命名為myabilitystage。(2)在myabilitystage目錄,右鍵選擇“New>ArkTSFile”,新建一個(gè)文件并命名為MyAbilityStage.ets。(3)打開(kāi)MyAbilityStage.ets文件,導(dǎo)入AbilityStage的依賴包,自定義類繼承AbilityStage并加上需要的生命周期回調(diào),示例中增加了一個(gè)onCreate()生命周期回調(diào)。應(yīng)用上下文Context圖6-4各類Context的繼承關(guān)系圖6-5各類Context的持有關(guān)系
各類Context的獲取方式(1)獲取UIAbilityContext。每個(gè)UIAbility中都包含了一個(gè)Context屬性,提供操作應(yīng)用組件、獲取應(yīng)用組件的配置信息等能力。(2)獲取特定場(chǎng)景ExtensionContext。以ServiceExtensionContext為例,表示后臺(tái)服務(wù)的上下文環(huán)境,繼承自ExtensionContext,提供后臺(tái)服務(wù)相關(guān)的接口能力。(3)獲取AbilityStageContext。Module級(jí)別的Context,和基類Context相比,額外提供HapModuleInfo、Configuration等信息。(4)獲取ApplicationContext。應(yīng)用級(jí)別的Context。ApplicationContext在基類Context的基礎(chǔ)上提供了訂閱應(yīng)用內(nèi)應(yīng)用組件的生命周期的變化、訂閱系統(tǒng)內(nèi)存變化和訂閱應(yīng)用內(nèi)系統(tǒng)環(huán)境的變化的能力,在UIAbility、ExtensionAbility、AbilityStage中均可以獲取。信息傳遞載體Want圖6-6Want用法示意進(jìn)程模型圖6-7進(jìn)程模型示意圖圖6-8多進(jìn)程示意圖線程模型Stage模型下的線程主要有如下三類:1)主線程
主線程的功能包括:執(zhí)行UI繪制。管理主線程的ArkTS引擎實(shí)例,使多個(gè)UIAbility組件能夠運(yùn)行在其之上。管理其他線程的ArkTS引擎實(shí)例,例如使用TaskPool(任務(wù)池)創(chuàng)建任務(wù)或取消任務(wù)、啟動(dòng)和終止Worker線程。分發(fā)交互事件。處理應(yīng)用代碼的回調(diào),包括事件處理和生命周期管理。接收TaskPool以及Worker線程發(fā)送的消息。2)TaskPoolWorker線程TaskPoolWorker線程用于執(zhí)行耗時(shí)操作,支持設(shè)置調(diào)度優(yōu)先級(jí)、負(fù)載均衡等功能,推薦使用。3)Worker線程Worker線程用于執(zhí)行耗時(shí)操作,支持線程間通信。程序訪問(wèn)控制1)TokenID系統(tǒng)采用TokenID(Tokenidentity)作為應(yīng)用的唯一標(biāo)識(shí)。2)APL等級(jí)為了防止應(yīng)用過(guò)度索取和濫用權(quán)限,系統(tǒng)基于APL等級(jí),配置了不同的權(quán)限開(kāi)放范圍。這里的APL指的是應(yīng)用的權(quán)限申請(qǐng)優(yōu)先級(jí)的定義,不同APL等級(jí)的應(yīng)用能夠申請(qǐng)的權(quán)限等級(jí)不同。(1)應(yīng)用APL等級(jí)。(2)權(quán)限APL等級(jí)3)授權(quán)方式根據(jù)授權(quán)方式的不同,權(quán)限類型可分為system_grant(系統(tǒng)授權(quán))和user_grant(用戶授權(quán))。選擇申請(qǐng)權(quán)限的方式圖6-9申請(qǐng)權(quán)限流程圖方舟UI框架圖6-10方舟UI框架示意圖圖6-11基于ArkTS的聲明式開(kāi)發(fā)范式的方舟UI框架整體架構(gòu)圖方舟UI框架的實(shí)現(xiàn)圖6-12常見(jiàn)頁(yè)面結(jié)構(gòu)圖圖6-13布局元素組成圖線性布局在布局容器內(nèi),可以通過(guò)space屬性設(shè)置排列方向上子元素的間距,使各子元素在排列方向上有等間距效果。以Column容器排列方向上的間距為例。示例6-5:Column容器排列方向上的間距Column({space:20}){Text('space:20').fontSize(15).fontColor(Color.Gray).width('90%')Row().width('90%').height(50).backgroundColor(0xF5DEB3)Row().width('90%').height(50).backgroundColor(0xD2B48C)Row().width('90%').height(50).backgroundColor(0xF5DEB3)}.width('100%')示例6-6:Column容器內(nèi)子元素在水平方向上的排列Column({}){Column(){}.width('80%').height(50).backgroundColor(0xF5DEB3)
Column(){}.width('80%').height(50).backgroundColor(0xD2B48C)
Column(){}.width('80%').height(50).backgroundColor(0xF5DEB3)}.width('100%').alignItems(HorizontalAlign.Start).backgroundColor('rgb(242,242,242)')添加組件(1)創(chuàng)建不包含子組件的按鈕。(2)創(chuàng)建包含子組件的按鈕。2)設(shè)置按鈕類型Button有三種可選類型,分別為膠囊類型(Capsule)、圓形按鈕(Circle)和普通按鈕(Normal),通過(guò)type進(jìn)行設(shè)置。1)創(chuàng)建按鈕3)自定義樣式4)添加事件Button組件通常用于觸發(fā)某些操作,可以綁定onClick事件來(lái)響應(yīng)點(diǎn)擊操作后的自定義行為。1.
按鈕(Button)2.
單選框(Radio)1)創(chuàng)建單選框2)添加事件除支持通用事件外,Radio還用于選中后觸發(fā)某些操作,可以綁定onChange事件來(lái)響應(yīng)選中操作后的自定義行為。3.
切換按鈕(Toggle)(1)創(chuàng)建不包含子組件的Toggle。(2)創(chuàng)建包含子組件的Toggle。2)添加事件除支持通用事件外,Toggle還用于選中和取消選中后觸發(fā)某些操作,可以綁定onChange事件來(lái)響應(yīng)操作后的自定義行為。添加組件4.
進(jìn)度條(Progress)Progress有5種可選類型,通過(guò)ProgressType可以設(shè)置進(jìn)度條樣式,ProgressType類型包括:ProgressType.Linear(線性樣式)、ProgressType.Ring(環(huán)形無(wú)刻度樣式)、ProgressType.ScaleRing(環(huán)形有刻度樣式)、ProgressType.Eclipse(圓形樣式)和ProgressType.Capsule(膠囊樣式)。添加組件5.
文本顯示(Text/Span)Text是文本組件,通常用于展示用戶視圖,如顯示文章的文字。Text('我是Text'){Span('我是Span')}.padding(10).borderWidth(1)(2)添加事件。由于Span組件無(wú)尺寸信息,事件僅支持添加點(diǎn)擊事件onClick。6.
文本輸入(TextInput/TextArea)TextInput、TextArea是輸入框組件,通常用于響應(yīng)用戶的輸入操作,比如評(píng)論區(qū)的輸入、聊天框的輸入、表格的輸入等,也可以結(jié)合其他組件構(gòu)建功能頁(yè)面,例如登錄注冊(cè)頁(yè)面。TextInput有9種可選類型,分別為Normal基本輸入模式、Password密碼輸入模式、Email郵箱地址輸入模式、Number純數(shù)字輸入模式、PhoneNumber電話號(hào)碼輸入模式、USER_NAME用戶名輸入模式、NEW_PASSWORD新密碼輸入模式、NUMBER_PASSWORD純數(shù)字密碼輸入模式、SCREEN_LOCK_PASSWORD鎖屏應(yīng)用密碼輸入模式、NUMBER_DECIMAL帶小數(shù)點(diǎn)的數(shù)字輸入模式。通過(guò)type屬性進(jìn)行設(shè)置添加組件7.
顯示圖片(Image)Image通過(guò)調(diào)用接口來(lái)創(chuàng)建,接口調(diào)用形式如下:Image(src:PixelMap|ResourceStr|DrawableDescriptor)該接口通過(guò)圖片數(shù)據(jù)源獲取圖片,支持本地圖片和網(wǎng)絡(luò)圖片的渲染展示。其中,src是圖片的數(shù)據(jù)源。8.
視頻播放(Video)Video組件用于播放視頻文件并控制其播放狀態(tài),常用于為短視頻和應(yīng)用內(nèi)部視頻的列表頁(yè)面。當(dāng)視頻完整出現(xiàn)時(shí)會(huì)自動(dòng)播放,用戶點(diǎn)擊視頻區(qū)域則會(huì)暫停播放,同時(shí)顯示播放進(jìn)度條,通過(guò)拖動(dòng)播放進(jìn)度條指定視頻播放到具體位置。9.
自定義繪制(XComponent)XComponent組件作為一種繪制組件,通常用于滿足開(kāi)發(fā)者較為復(fù)雜的自定義繪制需求,例如相機(jī)預(yù)覽流的顯示和游戲畫(huà)面的繪制。其可通過(guò)指定其type字段來(lái)實(shí)現(xiàn)不同的功能,主要有兩個(gè)“surface”和“component”字段可供選擇。添加氣泡和菜單1.添加氣泡氣泡Popup屬性可綁定在組件上顯示氣泡彈窗提示,設(shè)置彈窗內(nèi)容、交互邏輯和顯示狀態(tài)。主要用于屏幕錄制、信息彈出提醒等顯示狀態(tài)。氣泡分為兩種類型,一種是系統(tǒng)提供的氣泡PopupOptions,一種是開(kāi)發(fā)者可以自定義的氣泡CustomPopupOptions。2.菜單(Menu)Menu是菜單接口,一般用于鼠標(biāo)右鍵彈窗、點(diǎn)擊彈窗等。1)創(chuàng)建默認(rèn)樣式的菜單2)創(chuàng)建自定義樣式的菜單設(shè)置組件導(dǎo)航組件導(dǎo)航最常見(jiàn)的是Navigation和Tabs。本節(jié)主要介紹Navigation。圖6-34單頁(yè)面布局示意圖圖6-35單頁(yè)面顯示模式圖6-36分欄布局示意圖圖6-37分欄顯示模式設(shè)置頁(yè)面路由頁(yè)面路由(@ohos.router)指在應(yīng)用程序中實(shí)現(xiàn)不同頁(yè)面之間的跳轉(zhuǎn)和數(shù)據(jù)傳遞。Router模塊通過(guò)不同的url地址,可以方便地進(jìn)行頁(yè)面路由,輕松地訪問(wèn)不同的頁(yè)面。1.頁(yè)面跳轉(zhuǎn)Router模塊提供了兩種跳轉(zhuǎn)模式,分別是router.pushUrl()和router.replaceUrl()。同時(shí),Router模塊提供了兩種實(shí)例模式,分別是Standard和Single。這兩種模式?jīng)Q定了目標(biāo)url是否會(huì)對(duì)應(yīng)多個(gè)實(shí)例。2.頁(yè)面返回在返回的過(guò)程中,可能需要將數(shù)據(jù)傳遞給目標(biāo)頁(yè)面,這就需要用到數(shù)據(jù)傳遞功能。3.命名路由在開(kāi)發(fā)中為了跳轉(zhuǎn)到共享包Har或者Hsp中的頁(yè)面(即共享包中路由跳轉(zhuǎn)),可以使用router.pushNamedRoute()來(lái)實(shí)現(xiàn)。支持交互事件圖6-38觸摸事件原理1.點(diǎn)擊事件點(diǎn)擊事件是指通過(guò)手指或手寫筆做出一次完整的按下和抬起動(dòng)作。當(dāng)發(fā)生點(diǎn)擊事件時(shí),會(huì)觸發(fā)以下回調(diào)函數(shù):onClick(event:(event?:ClickEvent)=>void)event參數(shù)提供點(diǎn)擊事件相對(duì)于窗口或組件的坐標(biāo)位置,以及發(fā)生點(diǎn)擊的事件源。2.拖拽事件3.觸摸事件當(dāng)手指或手寫筆在組件上觸碰時(shí),會(huì)觸發(fā)不同動(dòng)作所對(duì)應(yīng)的事件響應(yīng),包括按下(Down)、滑動(dòng)(Move)、抬起(Up)事件:onTouch(event:(event?:TouchEvent)=>void)event.type為TouchType.Down:表示手指按下。event.type為TouchType.Up:表示手指抬起。event.type為TouchType.Move:表示手指按住移動(dòng)。OpenHarmony北向開(kāi)發(fā)典型項(xiàng)目:分布式繪圖分布式設(shè)備管理是分布式業(yè)務(wù)入口,在分布式業(yè)務(wù)中對(duì)周邊可信和非可信設(shè)備進(jìn)行統(tǒng)一管理。分布式設(shè)備管理提供如下四大功能:1)發(fā)現(xiàn)發(fā)現(xiàn)周圍終端設(shè)備并上報(bào)。周圍設(shè)備需要連接同局域網(wǎng)或者同時(shí)打開(kāi)藍(lán)牙,可以根據(jù)設(shè)備類型、距離、設(shè)備是否可信等進(jìn)行篩選。2)綁定不同設(shè)備協(xié)同合作完成分布式業(yè)務(wù)的前提是設(shè)備間可信,對(duì)于周邊發(fā)現(xiàn)的不可信設(shè)備,可通過(guò)綁定使彼此建立可信關(guān)系,提供pin碼、碰、掃、靠等設(shè)備認(rèn)證框架,支持對(duì)接各種認(rèn)證交互接口。3)查詢查詢功能包含:查詢本機(jī)設(shè)備信息、查詢周圍的在線的可信設(shè)備、查詢可信設(shè)備信息。4)監(jiān)聽(tīng)監(jiān)聽(tīng)設(shè)備上、下線。設(shè)備上線表示設(shè)備間已經(jīng)可信,業(yè)務(wù)可以發(fā)起分布式操作;設(shè)備下線表示分布業(yè)務(wù)不可用。OpenHarmony北向開(kāi)發(fā)典型項(xiàng)目:分布式繪圖繪圖部分本項(xiàng)目中繪圖所使用的組件主要是canvas畫(huà)布組件,其屬性與html5的canvas畫(huà)布屬性相同,只是在語(yǔ)法上面使用了ArkUI的語(yǔ)法特征。
開(kāi)發(fā)者使用CanvasRenderingContext2D對(duì)象和OffscreenCanvasRenderingContext2D對(duì)象在Canvas組件上進(jìn)行繪制,繪制對(duì)象可以是基礎(chǔ)形狀、文本、圖片等。OffscreenCanvasRenderingContext2D對(duì)象和CanvasRenderingContext2D對(duì)象提供了大量的屬性和方法,可以用來(lái)繪制文本、圖形,處理像素等,是Canvas組件的核心。常用接口有fill(對(duì)封閉路徑進(jìn)行填充)、clip(設(shè)置當(dāng)前路徑為剪切路徑)、stroke(進(jìn)行邊框繪制操作)等等,同時(shí)提供了fillStyle(指定繪制的填充色)、globalAlpha(設(shè)置透明度)與strokeStyle(設(shè)置描邊的顏色)等屬性修改繪制內(nèi)容的樣式。1.設(shè)備發(fā)現(xiàn)(1)導(dǎo)入deviceManager模塊所有與設(shè)備管理相關(guān)的功能API,都是通過(guò)該模塊提供的。(2)導(dǎo)入BusinessError模塊,用于獲取deviceManager模塊相關(guān)接口拋出的錯(cuò)誤碼。@ohos.base是OpenHarmonyArkTS接口的公共回調(diào)類型,其中BusinessError類型是接口調(diào)用失敗的公共錯(cuò)誤信息類型。(3)創(chuàng)建設(shè)備管理實(shí)例,設(shè)備管理實(shí)例是分布式設(shè)備管理方法的調(diào)用入口,并注冊(cè)發(fā)現(xiàn)設(shè)備的回調(diào)。(4)發(fā)現(xiàn)周邊設(shè)備。發(fā)現(xiàn)狀態(tài)將會(huì)持續(xù)兩分鐘,如果超過(guò)兩分鐘,會(huì)停止發(fā)現(xiàn)。最大設(shè)備發(fā)現(xiàn)數(shù)量是99個(gè)。2.設(shè)備連接(1)當(dāng)掃描到周圍的設(shè)備信息列表的時(shí)候,可以選擇需要連接的設(shè)備,發(fā)起設(shè)備綁定。(2)當(dāng)設(shè)備發(fā)現(xiàn)連接以后,可以對(duì)設(shè)備的信息,以及設(shè)備的上線下線進(jìn)行監(jiān)聽(tīng),通過(guò)設(shè)備信息查詢接口使用getAvailableDeviceListSync可以獲取所有上線并且可信的設(shè)備。(3)通過(guò)on(‘deviceStateChange’)事件綁定設(shè)備,進(jìn)行設(shè)備上下線監(jiān)聽(tīng)。3.數(shù)據(jù)同步設(shè)備連接完成以后,數(shù)據(jù)信息就可以傳輸了。接下來(lái)要把已經(jīng)產(chǎn)生的本地的畫(huà)板數(shù)據(jù)同步給分享的設(shè)備,具體方法是首先主設(shè)備的應(yīng)用要把已經(jīng)產(chǎn)生的操作數(shù)據(jù)進(jìn)行保存,在連接以后,再通過(guò)分布式數(shù)據(jù)實(shí)現(xiàn)數(shù)據(jù)同步。本項(xiàng)目使用LocalStorage作為當(dāng)前頁(yè)面的數(shù)據(jù)緩存部分,localStorage是ArkTS為存儲(chǔ)頁(yè)面級(jí)狀態(tài)變量的內(nèi)存型數(shù)據(jù)庫(kù)。第七章OpenHarmony編譯構(gòu)建OpenHarmony編譯基礎(chǔ)知識(shí)OpenHarmony編譯子系統(tǒng)涉及了以下主要概念,分別是:(1)平臺(tái):平臺(tái)是開(kāi)發(fā)板和內(nèi)核的組合,不同平臺(tái)支持的子系統(tǒng)和部件不同。(2)產(chǎn)品:產(chǎn)品是包含一系列部件的集合。(3)子系統(tǒng):子系統(tǒng)是一個(gè)邏輯概念,它具體由對(duì)應(yīng)的部件構(gòu)成。(4)部件:部件是對(duì)子系統(tǒng)的進(jìn)一步拆分,可復(fù)用的軟件單元。(5)模塊:模塊是編譯子系統(tǒng)的一個(gè)編譯目標(biāo),部件也可以是編譯目標(biāo)。(6)特性:特性是部件用于體現(xiàn)不同產(chǎn)品之間的差異。(7)GN:GenerateNinja的縮寫,用于產(chǎn)生Ninja文件。(8)Ninja:Ninja是一個(gè)專注于速度的小型構(gòu)建系統(tǒng)。
(9)hb:OpenHarmony的命令行工具,用來(lái)執(zhí)行編譯命令編譯構(gòu)建Kconfig可視化配置該功能基于Kconfiglib與Kconfig實(shí)現(xiàn),方便用戶個(gè)性化配置OpenHarmony產(chǎn)品子系統(tǒng)部件。Kconfig是一款Linux可視化配置文件格式。Kconfiglib是一款基于Kconfig格式實(shí)現(xiàn)的Linux可視化配置工具。產(chǎn)品適配規(guī)則(標(biāo)準(zhǔn)系統(tǒng))vendor/hihope/dayu800目錄主要存放廠家資料以及產(chǎn)品的配置文件,包括描述產(chǎn)品的config.json、產(chǎn)品的hcs配置文件以及其他配置文件等。device/board/hihope/dayu800目錄主要用于存放開(kāi)發(fā)板相關(guān)的文件,包括外設(shè)驅(qū)動(dòng)、啟動(dòng)參數(shù)、內(nèi)核編譯相關(guān)文件、燒錄相關(guān)文件、uboot相關(guān)文件以及升級(jí)相關(guān)文件。device/soc/thead/th1520目錄主要用于存放和芯片soc相關(guān)的文件和庫(kù),這些文件只會(huì)因芯片soc改變才會(huì)修改,而不會(huì)因?yàn)殚_(kāi)發(fā)板變化而進(jìn)行修改。產(chǎn)品適配規(guī)則(標(biāo)準(zhǔn)系統(tǒng))2)ohos.build文件適配該文件描述的是產(chǎn)品子系統(tǒng),這里使用的是product_dayu800,相關(guān)名稱需要將復(fù)制過(guò)來(lái)的文件修改為當(dāng)前產(chǎn)品的子系統(tǒng)名。同時(shí)需要將ohos.build的module_list下的模塊及子模塊中涉及part_name和subsystem_name全部修改為product_dayu800。3)產(chǎn)品配置目錄及文件修改表7-2列舉了產(chǎn)品配置目錄與文件,開(kāi)發(fā)者根據(jù)實(shí)際情況進(jìn)行修改產(chǎn)品適配規(guī)則(標(biāo)準(zhǔn)系統(tǒng))2.device/board/hihope/dayu800適配步驟1)ohos.build文件適配該文件描述的是設(shè)備子系統(tǒng),這里使用的是device_th1520,相關(guān)名稱需要將復(fù)制過(guò)來(lái)的文件修改為當(dāng)前設(shè)備子系統(tǒng)名。同時(shí)需要將ohos.build的module_list下的模塊及子模塊中涉及part_name和subsystem_name全部修改為device_th1520。2)設(shè)備目錄功能適配介紹表7-3列舉了設(shè)備目錄及功能。3.device/soc/thead/th1520適配步驟這個(gè)目錄主要涉及兩個(gè)目錄hardware和kernel的適配,其中hardware目錄存放的是芯片廠家提供的硬件相關(guān)的源碼、閉源庫(kù)以及配置文件;kernel目錄存放的是從linux內(nèi)核中抽象出來(lái)的和芯片soc相關(guān)的獨(dú)立源碼和獨(dú)立驅(qū)動(dòng)代碼,其目的是在版本升級(jí)時(shí),關(guān)于驅(qū)動(dòng)部分可以不用做修改。子系統(tǒng)配置通過(guò)build倉(cāng)下的subsystem_config.json可以查看所有子系統(tǒng)的配置規(guī)則。{"arkui":{"path":"foundation/arkui",#路徑"name":"arkui"#子系統(tǒng)名},"ai":{"path":"foundation/ai","name":"ai"},},...}子系統(tǒng)的配置規(guī)則主要是在build/subsystem_config.json中指定子系統(tǒng)的路徑和子系統(tǒng)名稱。部件配置規(guī)則及編譯部件配置規(guī)則部件的bundle.json放在部件源碼的根目錄下。以泛sensor子系統(tǒng)的sensor服務(wù)部件為例,部件屬性定義描述文件字段說(shuō)明如下:部件配置中需要配置部件的名稱、源碼路徑、功能簡(jiǎn)介、是否必選、編譯目標(biāo)、RAM、ROM、編譯輸出、已適配的內(nèi)核、可配置的特性和依賴等屬性定義。新增部件時(shí)需要在對(duì)應(yīng)子系統(tǒng)json文件中添加相應(yīng)的部件定義。產(chǎn)品所配置的部件必須在某個(gè)子系統(tǒng)中被定義過(guò),否則會(huì)校驗(yàn)失敗。部件配置規(guī)則及編譯新增并編譯部件本節(jié)以添加一個(gè)自定義的部件為例,描述如何編譯部件,編譯庫(kù)、編譯可執(zhí)行文件等。(1)添加部件。示例部件partA由feature1、feature2和feature3組成,feature1的編譯目標(biāo)為一個(gè)動(dòng)態(tài)庫(kù),feature2的目標(biāo)為一個(gè)可執(zhí)行程序,feature3的目標(biāo)為一個(gè)etc配置文件。示例部件partA的配置需要添加到一個(gè)子系統(tǒng)中,本示例將添加到subsystem_examples子系統(tǒng)中(subsystem_examples子系統(tǒng)定義在test/examples/目錄)。部件配置規(guī)則及編譯新增并編譯部件本節(jié)以添加一個(gè)自定義的部件為例,描述如何編譯部件,編譯庫(kù)、編譯可執(zhí)行文件等。示例部件partA由feature1、feature2和feature3組成,feature1的編譯目標(biāo)為一個(gè)動(dòng)態(tài)庫(kù),feature2的目標(biāo)為一個(gè)可執(zhí)行程序,feature3的目標(biāo)為一個(gè)etc配置文件。示例部件partA的配置需要添加到一個(gè)子系統(tǒng)中,本示例將添加到subsystem_examples子系統(tǒng)中(subsystem_examples子系統(tǒng)定義在test/examples/目錄)。部件配置規(guī)則及編譯1.新增并編譯部件本節(jié)以添加一個(gè)自定義的部件為例,描述如何編譯部件,編譯庫(kù)、編譯可執(zhí)行文件等。(2)將部件添加到產(chǎn)品配置中。(3)編譯。
部件主要有兩種編譯方式,命令行方式和hb方式,下面以命令行方式為例:部件可以使用"–build-target部件名"進(jìn)行單獨(dú)編譯,以編譯產(chǎn)品dayu800的musl部件為例,編譯命令如下:./build.sh--product-namedayu800--build-targetmusl--ccache也可以編譯相應(yīng)產(chǎn)品,以編譯dayu800為例,編譯命令如下:./build.sh--product-namedayu800--ccache(4)編譯輸出。
編譯所生成的文件都?xì)w檔在out/dayu800/目錄下。部件配置規(guī)則及編譯1.新增并編譯部件本節(jié)以添加一個(gè)自定義的部件為例,描述如何編譯部件,編譯庫(kù)、編譯可執(zhí)行文件等。(2)將部件添加到產(chǎn)品配置中。(3)編譯。
部件主要有兩種編譯方式,命令行方式和hb方式,下面以命令行方式為例:部件可以使用"–build-target部件名"進(jìn)行單獨(dú)編譯,以編譯產(chǎn)品dayu800的musl部件為例,編譯命令如下:./build.sh--product-namedayu800--build-targetmusl--ccache也可以編譯相應(yīng)產(chǎn)品,以編譯dayu800為例,編譯命令如下:./build.sh--product-namedayu800--ccache(4)編譯輸出。
編譯所生成的文件都?xì)w檔在out/dayu800/目錄下。模塊配置規(guī)則及編譯7.6.1模塊配置規(guī)則編譯子系統(tǒng)通過(guò)模塊、部件和產(chǎn)品三層配置來(lái)實(shí)現(xiàn)編譯和打包。模塊就是編譯子系統(tǒng)的一個(gè)目標(biāo),包括(動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)、配置文件、預(yù)編譯模塊等)。模塊要定義屬于哪個(gè)部件,一個(gè)模塊只能歸屬于一個(gè)部件。OpenHarmony使用定制化的GN模板來(lái)配置模塊規(guī)則。推薦使用ohos定制模板。模塊配置規(guī)則及編譯7.6.1模塊配置規(guī)則編譯子系統(tǒng)通過(guò)模塊、部
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省成都市成華區(qū)2025-2026學(xué)年九年級(jí)上學(xué)期期末檢測(cè)歷史試卷(含答案)
- 2026年漢中市中醫(yī)醫(yī)院招聘(9人)考試參考題庫(kù)及答案解析
- 2026浙江紹興市應(yīng)急管理局選調(diào)下屬事業(yè)單位人員1人筆試模擬試題及答案解析
- 2026云南云投版納石化有限責(zé)任公司招聘2人筆試參考題庫(kù)及答案解析
- 2026江蘇蘇州市太倉(cāng)市委員會(huì)宣傳部招聘1人筆試備考試題及答案解析
- 2026湖北黃岡市紅安縣博物館講解員招聘3人筆試參考題庫(kù)及答案解析
- 2026年松滋市事業(yè)單位人才引進(jìn)102人考試參考試題及答案解析
- 2026福建南平市浦城縣浦恒供應(yīng)鏈有限公司職業(yè)經(jīng)理人招聘1人考試備考題庫(kù)及答案解析
- 2026福建福州市潤(rùn)樓教育科技集團(tuán)有限公司招聘8人考試備考試題及答案解析
- 示范社區(qū)衛(wèi)生服務(wù)中心基本醫(yī)療考核評(píng)估指標(biāo)
- 跨區(qū)銷售管理辦法
- 超聲年終工作總結(jié)2025
- 鉆井工程施工進(jìn)度計(jì)劃安排及其保證措施
- 管培生培訓(xùn)課件
- 梗阻性黃疸手術(shù)麻醉管理要點(diǎn)
- 架空輸電線路建設(shè)關(guān)鍵環(huán)節(jié)的質(zhì)量控制與驗(yàn)收標(biāo)準(zhǔn)
- 民用機(jī)場(chǎng)場(chǎng)道工程預(yù)算定額
- 重生之我在古代當(dāng)皇帝-高二上學(xué)期自律主題班會(huì)課件
- 膀胱切開(kāi)取石術(shù)護(hù)理查房
- 混凝土試塊標(biāo)準(zhǔn)養(yǎng)護(hù)及制作方案
- GB/T 45355-2025無(wú)壓埋地排污、排水用聚乙烯(PE)管道系統(tǒng)
評(píng)論
0/150
提交評(píng)論