• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于銀河銳華終端操作系統(tǒng)的C++適配層研究

      2023-10-23 02:58:18麥秀青
      計算機時代 2023年10期
      關(guān)鍵詞:庫中橋接管理器

      王 千,麥秀青,陸 平

      (中國電子科技集團公司第三十二研究所基礎(chǔ)軟件部,上海 201808)

      0 引言

      近年來,我國與歐美一些國家之間以操作系統(tǒng)為核心的技術(shù)生態(tài)體系競爭日益顯現(xiàn)[1-2]。Android 從移動設(shè)備、穿戴設(shè)備、智能家居全方位打造的生態(tài)圈已經(jīng)相當(dāng)成熟[3],在我國的移動終端市場占有極大的比例,甚至一些安全要求高的專用領(lǐng)域也在使用Android系統(tǒng),如北斗導(dǎo)航、警用搜救、軍用作戰(zhàn)等[4-5],這無疑在安全性、知識產(chǎn)權(quán)等多方面都存在巨大風(fēng)險[6]。在此背景下,銀河銳華終端操作系統(tǒng)(YROS)就成為了很好的國產(chǎn)化替代方案。

      銀河銳華終端操作系統(tǒng)是國防科技大學(xué)與中國電子科技集團第三十二研究所自主研發(fā)的智能移動終端操作系統(tǒng),使用Linux+HTML5 的實現(xiàn)方案,適用于智能手持、平板、可穿戴等移動終端設(shè)備[7]。

      銀河銳華終端操作系統(tǒng)應(yīng)用是使用HTML5+JavaScript+CSS 的模式開發(fā)的,這種開發(fā)模式具有界面適配靈活、可移植性強的特點[8-10],但是用于開發(fā)移動終端應(yīng)用也存在較多問題,諸如運行效率較低、可調(diào)試性差、對底層的操控性差等[11]。此外,由于一些專用領(lǐng)域已在使用基于Android開發(fā)的軟件,這些Android應(yīng)用多為Java+Native 模式開發(fā),即有很多對性能要求較高的核心功能是通過JNI 的方式在Native 層實現(xiàn)的[12-13],而將這部分代碼通過JavaScript 的方式移植到銀河銳華終端操作系統(tǒng)上往往是不現(xiàn)實的。若能夠提供一種切實可行的移植方案,則能加快國產(chǎn)化移動操作系統(tǒng)的普及以及生態(tài)的建立。

      綜上所述,在銀河銳華終端操作系統(tǒng)上實現(xiàn)應(yīng)用的C++/JavaScrip 混合開發(fā)是非常有必要的?;诖耍疚倪M行基于銀河銳華終端操作系統(tǒng)的C++適配層研究,通過對系統(tǒng)框架層與系統(tǒng)接口進行擴展,實現(xiàn)C++與JavaScript的交互調(diào)用。

      1 C++適配層框架

      基于銀河銳華終端操作系統(tǒng)的C++適配層通過插件的方式,動態(tài)加載按照特定方式實現(xiàn)的功能性C++插件庫文件,并以系統(tǒng)接口的形式實現(xiàn)JavaScript 與C++插件庫之間的交互調(diào)用。

      在銀河銳華終端操作系統(tǒng)的框架層拓展插件庫模塊管理器與插件庫對象管理器。其中插件庫模塊管理器對所有的C++插件庫以模塊的形式進行動態(tài)管理;而插件庫對象管理器則隸屬于每一個應(yīng)用進程,用于JavaScript對C++插件庫的具體調(diào)用。

      C++適配層的架構(gòu)圖如圖1所示。

      圖1 C++適配層架構(gòu)圖

      1.1 C++插件庫

      C++插件庫需要按照特定的方式進行開發(fā)。

      C++適配層提供了一個插件庫的基類,C++插件庫應(yīng)繼承該基類根據(jù)具體功能需求實現(xiàn)一個橋接類,該橋接類將作為C++插件庫接收JavaScrip 調(diào)用指令的入口。橋接類的主要功能包括插件的初始化與插件的方法調(diào)用。繼承插件庫基類實現(xiàn)橋接類的關(guān)鍵在于調(diào)用方法的重載實現(xiàn),調(diào)用方法接收JavaScrip 傳遞的操作指令以及指令參數(shù),根據(jù)指令進行相應(yīng)操作決策,并將執(zhí)行的最終結(jié)果返回到JavaScrip。由于指令參數(shù)在數(shù)量以及類型上均存在不確定性,因此在C++插件庫基類聲明了一個字符串作為指令參數(shù),應(yīng)用開發(fā)時,可以根據(jù)實際情況在傳入時對參數(shù)列表進行編碼,并在C++適配層中進行相應(yīng)的解碼工作,以保證參數(shù)的正確傳遞。

      C++插件庫需要按照約定聲明一個全局插件實例,該實例將在C++插件庫加載時被初始化,該實例的指針將向外提供,用于對插件庫中的方法進行調(diào)用。

      此外,C++適配層還為C++插件庫提供一個接口用于其對JavaScript的回調(diào)。在該回調(diào)方法中,將通過回調(diào)ID惟一標示每一次回調(diào)過程。

      1.2 插件庫模塊管理器

      插件庫模塊管理器將每個C++插件庫作為一個模塊進行動態(tài)管理,插件模塊中保存有系統(tǒng)調(diào)用該C++插件庫時所需的信息,具體如下:

      插件庫句柄:用于保存C++插件庫的句柄。

      插件庫橋接類實例指針:用于保存橋接類的實例。

      回調(diào)方法指針:用于保存C++插件庫發(fā)起對JavaScript調(diào)用的入口方法。

      注冊回調(diào)指針方法:用于系統(tǒng)向插件庫中進行回調(diào)方法的注冊。

      刪除回調(diào)指針方法:用于系統(tǒng)移出插件庫中的回調(diào)方法。

      調(diào)用方法:用于系統(tǒng)發(fā)起對C++插件庫的調(diào)用。

      每當(dāng)應(yīng)用使用JavaScript 發(fā)起加載一個C++插件庫的請求時,系統(tǒng)為該插件庫動態(tài)生成插件模塊進行保存;當(dāng)JavaScript 進行C++插件庫功能調(diào)用時,插件庫模塊管理器將通過C++插件庫的句柄進行方法調(diào)用;若C++插件庫需要進行回調(diào),需要JavaScript 首先向插件庫中注冊回調(diào)方法指針進行保存,插件庫通過插件模塊中保存的回調(diào)方法指針進行回調(diào)。

      1.3 插件庫對象管理器

      每個應(yīng)用將獨立擁有一個專屬于自己的插件庫對象管理器,插件庫對象管理器向應(yīng)用提供用于與C++插件庫進行交互的系統(tǒng)接口,這些接口主要包括:

      C++插件庫初始化接口(init):用于動態(tài)加載指定C++插件庫,創(chuàng)建該庫的模塊實例;

      C++插件庫調(diào)用接口(exec):用于調(diào)用C++插件庫中的指定功能;

      注冊回調(diào)方法接口(addListener):用于注冊接收并處理C++插件庫回調(diào)事件的方法;

      移除回調(diào)方法接口(removeListener):用于停止接收C++插件庫中的回調(diào)事件;

      檢測庫是否加載接口(isloadedlibrary):用于檢測某指定C++插件庫是否被成功加載;

      卸載C++插件庫接口(unloadlibrary):用于卸載指定的C++插件庫。

      1.4 應(yīng)用與C++插件庫的交互調(diào)用

      C++適配層通過拓展系統(tǒng)JavaScript 接口向應(yīng)用提供與C++插件庫的交互調(diào)用功能。

      首先應(yīng)用通過初始化接口(init)加載指定路徑的C++插件庫,并為該C++插件庫指定一個惟一的標示符;再通過調(diào)用接口(exec)指定操作字段,調(diào)用C++插件庫的指定功能;應(yīng)用注冊回調(diào)事件處理方法(addListener),用于接收處理C++插件庫的回調(diào)事件,回調(diào)事件中包括用于標示每個回調(diào)的惟一ID,以及傳遞的參數(shù),回調(diào)事件處理方法通過識別不同的回調(diào)ID來進行不同的處理;當(dāng)應(yīng)用與C++插件庫的交互調(diào)用結(jié)束時,通過調(diào)用移除回調(diào)方法接口(removeListener)結(jié)束對C++插件庫回調(diào)的監(jiān)聽,并最后通過調(diào)用卸載庫接口卸載指定C++插件庫。應(yīng)用與C++插件庫的交互流程圖如圖2所示。

      圖2 應(yīng)用與C++插件庫交互調(diào)用流程圖

      2 應(yīng)用C++/JavaScript混合開發(fā)實現(xiàn)

      在銀河銳華終端操作系統(tǒng)中增加C++適配層框架后,便能夠?qū)︺y河銳華終端操作系統(tǒng)應(yīng)用進行C++/JavaScript 開發(fā)。本章節(jié)將使用該模式進行一個簡單加減法計算應(yīng)用的開發(fā),其中加減法的運算邏輯功能在C++插件庫中設(shè)置,而應(yīng)用通過JavaScript使用系統(tǒng)接口實現(xiàn)對C++插件庫的功能調(diào)用。

      2.1 C++插件庫的實現(xiàn)

      應(yīng)用通過繼承C++適配層提供的基類按照功能需求實現(xiàn)自己的C++插件庫。該插件類的實現(xiàn)關(guān)鍵在于對方法Execute的重載實現(xiàn),該方法的核心在于通過對指令參數(shù)的解析來選擇需要執(zhí)行的處理流程,并解析傳入?yún)?shù)進行相應(yīng)的處理。

      在該實現(xiàn)過程中,使用“ADD”、“MIN 作為操作指令,并將參數(shù)列表按照JSON 格式進行解析;在進行相應(yīng)的功能操作后將結(jié)果同樣進行JSON封裝后返回。

      Calculator.h實現(xiàn)的偽代碼如“代碼1”所示。

      2.2 應(yīng)用與C++插件庫交互調(diào)用的實現(xiàn)

      應(yīng)用通過插件庫對象管理器加載C++插件庫,并對C++插件庫進行調(diào)用,添加回調(diào)監(jiān)聽器來監(jiān)聽并處理C++插件庫中的回調(diào)事件。

      一個簡單的對上述加、減運算C++插件庫的交互JavaScript 示例如代碼3 所示。首先應(yīng)用需要實例化一個插件庫對象管理器,并調(diào)用初始化接口對C++插件庫進行初始化;然后通過注冊回調(diào)方法接口注冊一個回調(diào)方法;最后將參數(shù)進行JSON 格式封裝后通過C++插件庫調(diào)用接口進行具體功能的調(diào)用。

      3 結(jié)束語

      基于銀河銳華終端操作系統(tǒng)的C++適配層通過擴展系統(tǒng)框架與系統(tǒng)接口,實現(xiàn)JavaScript與C++的交互調(diào)用,從而使銀河銳華終端操作系統(tǒng)應(yīng)用的開發(fā)能夠使用C++/JavaScript 混合進行。這就使銀河銳華終端操作系統(tǒng)應(yīng)用的開發(fā)更加靈活與便捷;也使更多的Android 應(yīng)用能夠更方便地移植到銀河銳華終端操作系統(tǒng)上。這無疑能大大加快專用領(lǐng)域的移動操作系統(tǒng)國產(chǎn)化進程。

      猜你喜歡
      庫中橋接管理器
      動物城堡
      動物城堡
      Microchip推出首款車載以太網(wǎng)音視頻橋接(AVB)全集成解決方案
      汽車零部件(2021年4期)2021-04-29 01:47:10
      應(yīng)急狀態(tài)啟動磁盤管理器
      Windows文件緩沖處理技術(shù)概述
      智能盤庫在自動化立體庫中的探索和應(yīng)用
      蘋果腐爛病樹橋接復(fù)壯技術(shù)
      雙靜脈皮瓣橋接移植修復(fù)手指腹皮膚缺損
      白皮書《802.11ac MU-MIMO: 橋接Wi-Fi中的間隙》發(fā)布
      高集成度2.5A備份電源管理器簡化鋰離子電池備份系統(tǒng)
      会宁县| 民丰县| 从化市| 城市| 哈巴河县| 象山县| 元阳县| 芷江| 青河县| 石家庄市| 邓州市| 桂东县| 揭阳市| 延长县| 宁陕县| 台中县| 阜新| 玛多县| 都江堰市| 琼海市| 桑植县| 连江县| 遵化市| 麻栗坡县| 隆昌县| 长沙市| 河南省| 三门县| 张掖市| 临西县| 台江县| 田东县| 平湖市| 卓尼县| 安陆市| 黑龙江省| 凉山| 长垣县| 玉屏| 南和县| 汨罗市|