我這里以3518的開發(fā)板為例進(jìn)行講解,3516的也是通用的。
下面是之前全量編譯的腳本
python build.py ipcamera_hi3518ev300 -b debug
HarmonyOS最初只能支持全量編譯的方式,這種方式最大的弊端就是我們在系統(tǒng)源碼上開發(fā)一個(gè)用戶態(tài)程序,每次都需要全量編譯好系統(tǒng)之后進(jìn)行鏡像的燒錄,每次編譯加燒錄少說需要15分鐘時(shí)間,對于我們開發(fā)測試及其消耗時(shí)間,試想下每次就是想加入一行l(wèi)og調(diào)試下這么費(fèi)勁會多么麻煩。
還好,后面隨著HarmonyOS的源碼更新,開始支持用戶態(tài)程序的單模塊編譯了,編譯的腳本如下:
python build.py ipcamera_hi3518ev300 -T //applications/sample/camera/app:camera_app
這里以單獨(dú)編譯HarmonyOS自帶的HelloWorld項(xiàng)目為例,這個(gè)-T參數(shù)非常重要,它就是代表單模塊編譯的,//applications/sample/camera/app只的要編譯的模塊的絕對路徑,camera_app為要編譯的模塊名稱。
這里先結(jié)合HarmonyOS源碼講下-T參數(shù)的由來,如果各位是通過下載壓縮包的方式下載的官方的code1.0的源碼壓縮包解壓的話,肯定是不支持該參數(shù)的,也就是說不支持單模塊編譯。下面來看下該參數(shù)是在什么時(shí)候更新到源碼庫的吧,首先我們?nèi)itee上找到編譯構(gòu)建框架所在的代碼倉,如下圖
然后,我們查看該倉庫下的commit記錄,然后就可以找到下面的關(guān)鍵記錄
看commit的日志已經(jīng)很明確了這里加入了單模塊構(gòu)建,下面我們打開該commit記錄仔細(xì)看看具體修改了什么
看到這里,大家就知道這個(gè)-T參數(shù)怎么來的了吧,為了讓你的代碼支持單模塊編譯,趕緊去git更新下代碼吧,如果下載code1.0離線代碼的也不用著急,可以直接把build倉下的最新代碼全部下載下來替換之前的build倉即可。
下面再來講講前面單模塊編譯最后面的那個(gè)模塊名稱camera_app怎么來的吧,關(guān)于用戶態(tài)程序如何編譯的,建議大家好好看看官方源碼的“用戶程序框架”倉下的介紹,絕對會受益良多。我這里挑重點(diǎn)講,首先是在//build/lite/product/ipcamera_hi3518ev300.json這個(gè)文件中進(jìn)行了用戶程序編譯的相關(guān)配置,可以理解為一個(gè)配置清單,告訴系統(tǒng)哪些用戶態(tài)程序需要參與編譯。我們可以在里面找到如下配置
{ "name": "applications", "component": [ { "name": "camera", "dir": "http://applications/sample/camera/app:camera_app", "features":[] }, { "name": "communication", "dir": "http://applications/sample/camera/communication:sample", "features":[] } ] },
看到dir后面的配置就自然會聯(lián)想到我們之前-T后面的參數(shù)為何要使用它了吧,那么最后的冒號后面的camera_app參數(shù)又從哪里來呢?
那么這里首先要對linux下的c語言編譯有一定了解才行了,大家如果看不懂后面的可以先去補(bǔ)習(xí)下Makefile和gn的知識。
這里每個(gè)用戶態(tài)程序都是通過gn文件配置進(jìn)行編譯的,我們先在源碼目錄下找到這個(gè)模塊路徑,如下圖
哈哈,大家可能會疑惑我咋是用idea在看代碼,因?yàn)楸救?a target="_blank">電腦沒安裝source insight,加上本人最精通的技術(shù)是java和Android,所以使用idea習(xí)慣了,一個(gè)快速檢索功能足夠我閱讀系統(tǒng)源碼了。
這里我們看到了BUILD.gn腳本,打開瞅瞅,可以看到如下關(guān)鍵代碼,
lite_component("camera_app") { target_type = "executable" features = [ ":hello_world", ] }
之前調(diào)用的參數(shù)模塊名稱camera_app就是在這里配置的。
下面簡單列舉一個(gè)gn的一個(gè)標(biāo)準(zhǔn)的helloworld用法,如下
executable("hello_world") { sources = [ "hello_world.c", ] }
后面我在講如何創(chuàng)建一個(gè)獨(dú)立的用戶態(tài)程序會編寫這個(gè)gn文件和json文件。本篇已經(jīng)夠長了,就放在下一篇博客講解了。
看系統(tǒng)源碼確實(shí)還是很有意思的,只奈工作太忙沒有時(shí)間看。
編輯:hfy
-
intel
+關(guān)注
關(guān)注
19文章
3478瀏覽量
185650 -
燒錄
+關(guān)注
關(guān)注
8文章
252瀏覽量
35495 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1966瀏覽量
29962
發(fā)布評論請先 登錄
相關(guān)推薦
評論