使用Python開發(fā)鴻蒙應(yīng)用--2021.01.07直播圖文
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
寫在前面:
每年的過年前夕,手中的項目一定會告急。。。而自己又缺乏三頭六臂七十二變等特技,所以只能在鴻蒙社區(qū)先消失一陣子了。今天再看社區(qū)的帖子,發(fā)現(xiàn)大家的進(jìn)步可不一般,各種案例示例層出不窮,一片欣欣向榮的景象!在這樣的氛圍下,我又來了分享的欲望,希望自己的一點積累能為鴻蒙宇宙添磚加瓦。
直播主題回顧:


考慮到很多同學(xué)可能是新手,這里首先要談?wù)劷徊婢幾g的概念!
交叉編譯是嵌入開發(fā)中的基礎(chǔ)概念,名字看起來高端大氣上檔次,但其本質(zhì)還是編譯,也就是把C/C++代碼編譯成可執(zhí)行程序,和我們初學(xué)C/C++語言時的 Hello World! 程序編譯幾乎完全相同。
那么,你可能會問,不同之處在哪里?
不同之處僅僅是,Hello World! 在本機編譯,可執(zhí)行程序在本機運行;而交叉編譯則是:程序在本機編譯,而可執(zhí)行程序在設(shè)備運行(即:本機無法直接運行交叉編譯得到的二進(jìn)制文件)。
對于大型嵌入式企業(yè),開發(fā)環(huán)境一般分為兩個部分:代碼編輯環(huán)境和代碼編譯環(huán)境。產(chǎn)品代碼位于代碼服務(wù)器上,每個員工遠(yuǎn)程登錄代碼服務(wù)器之后創(chuàng)建自己的代碼分支,之后就可以進(jìn)行代碼編輯和編譯了。其中,代碼編輯是在員工的工作PC上完成;而代碼編譯則是在服務(wù)器上完成。編譯得到的二進(jìn)制可執(zhí)行程序,需要拷貝到工作PC上之后燒寫到設(shè)備中。

大家通過類比可以發(fā)現(xiàn),其實目前的鴻蒙設(shè)備開發(fā)方式就是企業(yè)級嵌入式產(chǎn)品的開發(fā)方式,只不過進(jìn)行了縮減而已!代碼編輯和代碼編譯在“不同的機器上”,兩臺機器通過網(wǎng)絡(luò)互聯(lián),交叉編譯得到的二進(jìn)制文件通過代碼編輯所在的環(huán)境燒寫到設(shè)備。
那么,這有什么問題嗎?
傳統(tǒng)的嵌入式開發(fā)方式對于程序老手來說,沒有任何問題,用起來游刃有余。但是,對于新手來說就可能是個噩夢了。
大家可以想想,程序出問題后如何定位?
就目前鴻蒙設(shè)備開發(fā)的情況來說,只有打印日志這一招可用。
這一招最常用,可問題也不少。。。

當(dāng)然,有同學(xué)可能會說:“接個JTag斷點調(diào)試就可以解決這個問題了!”
我想說,理論上確實如此,但是目前支持鴻蒙系統(tǒng)的開發(fā)板(如:Hi3861開發(fā)板)幾乎不可能使用JTag進(jìn)行調(diào)試!說得更簡單一點:目前還沒法用JTag對鴻蒙設(shè)備進(jìn)行調(diào)試。所以,得另想辦法,而Python是一個可行的選擇。
Python語言簡單而又不失強大,用于設(shè)備應(yīng)用開發(fā)是再合適不過了。并且的,Python開發(fā)者數(shù)量巨大,如果鴻蒙應(yīng)用開發(fā)能夠支持Python語言,那么鴻蒙宇宙又可以增加無數(shù)閃耀的新星!
目標(biāo):除C語言之外,給開發(fā)者提供另一種選擇,可以使用Python語言開發(fā)鴻蒙設(shè)備應(yīng)用程序。所以,最迫切需要的是一個Python語言解釋器,并且能夠作為應(yīng)用的一部分運行于設(shè)備上。如下圖所示:
那么現(xiàn)在的問題就是:如何獲得需要的Python語言解釋器?

在這里有同學(xué)可能會問:為什么不直接移植MicroPython?而是對MicroPython做剪裁?
原因很簡單,我的想法是讓鴻蒙設(shè)備支持Python開發(fā)方式,而不是取代C語言開發(fā)方式,更不是取代鴻蒙!大家要明白MicroPython設(shè)計的初衷是直接運行于微控器,使用Python控制硬件,所以MicroPython本身已經(jīng)具備了一些操作系統(tǒng)的特質(zhì),如果直接移植到設(shè)備(Hi3861開發(fā)板),那么也就意味著用MicroPython替代了鴻蒙,這顯然與期望不符!
MicroPython的語言解釋器是對Python的一個重新實現(xiàn),非常適合資源受限的嵌入式設(shè)備。因此,最好的做法就是剪裁MicroPython的語言解析器,之后將鴻蒙設(shè)備的系統(tǒng)API接口綁定到Python語言(即:Python版同名系統(tǒng)API),這樣就可以達(dá)到我的目的了。


很顯然,在設(shè)備端需要開發(fā)一個應(yīng)用引擎。如果需要使用Python開發(fā)設(shè)備應(yīng)用程序,直接編譯這個應(yīng)用引擎并運行于設(shè)備之上。
而設(shè)備應(yīng)用程序由Python腳本構(gòu)成,編寫好之后傳入設(shè)備中即可。
講到這里相信各位同學(xué)也明白了,設(shè)備應(yīng)用的Python腳本其實根本“不知道”自己執(zhí)行在鴻蒙系統(tǒng)上,這些腳本的執(zhí)行僅僅需要Python解釋器和相應(yīng)API接口。那么,請大家思考一下,如果這個引擎運行于Windows之上會發(fā)生什么?

會發(fā)生的事情顯然就是:我們可以在Windows上執(zhí)行為鴻蒙設(shè)備而編寫的Python應(yīng)用腳本。
于是,前面所說的調(diào)試問題就可以迎刃而解了。
在Windows上使用純Python語言模擬實現(xiàn)鴻蒙設(shè)備的API接口(Python版),然后使用現(xiàn)有的Python開發(fā)環(huán)境調(diào)試設(shè)備應(yīng)用腳本(如:斷點調(diào)試),這樣就可以大大提高開發(fā)效率,避免代碼中滿篇的添加printf 打印語句。




Jython是使用Java語言對Python的一個重新實現(xiàn),借助它就可以在Java中使用Python進(jìn)行編碼。
而鴻蒙手機APP支持使用Java語言進(jìn)行開發(fā),所以理論上可以在手機APP中使用Python完成部分代碼的編寫!相關(guān)案例我會在后續(xù)為大家提供出來。
此次直播回放可以點擊下面鏈接觀看。
https://edu.51cto.com/course/26379.html
課件資料可在文末附件中下載。
希望大家能多多關(guān)注我的分享!
©著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz