成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenHarmony系統是怎么知道應用是Ark應用的

系統 OpenHarmony
本人手中的開發板是Hi3516,所以去productdefine目錄下面查看了一下Hi3516DV300.json文件,確認是否Ark子系統是否參與了編譯。

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

??https://ost.51cto.com??

背景

自從OpenHarmony系統3.0-LTS版本發布之后,OpenHarmony系統對JS應用增加了Ark方舟運行時,但之前的QuickJS運行時卻有沒有移除,就產生了兩個好奇的問題。

OpenHarmony系統中存在兩個JS運行時,那開發的JS應用到底是運行在哪個運行時中的?

OpenHarmony系統又是怎么識別Hap包是Ark JS應用的?

探究

第一步,確定系統是否真的存在Ark方舟運行時。

OpenHarmony系統源碼中,雖然提供了Ark方舟運行時代碼,但開發板編譯的系統不一定會編譯Ark方舟運行時。本人手中的開發板是Hi3516,所以去productdefine目錄下面查看了一下Hi3516DV300.json文件,確認是否Ark子系統是否參與了編譯。

從上圖可以看出,Ark子系統參與了系統編譯,那就去開發板系統下確認一下。通過hdc工具查看,hdc shell進入系統中,在system/lib 目錄下搜索ark字樣,結果顯示確實有Ark JS運行時libark_jsruntime.so。

從上圖結果中,還可以看出ace JS UI框架部分的so庫也有ark版本的。

第二步,確定Ace JS UI框架是否存在Ark和QuickJS同時支持。

繼續在hdc shell下搜索ace相關的so庫信息。

從上圖的信息中,Ace是同時支持Ark和QuickJS的。既然如此,那就去查看OpenHarmony的源碼吧,系統究竟是怎么進行識別Hap應用的類型的。

第三步,確認系統SO庫的選擇方式。

多年的程序開發經驗,讓我立馬就猜測,系統可能會有so庫的選擇過程,比如 libace_engine_ark.z.so 和 libace_engine_qjs.z.so 兩個的選擇。于是我就在OpenHarmony源碼下的foundation目錄下進行了 find 查找。

find 的結果真的印證我的猜測,真有相關代碼信息。那就去ace_container.cpp這個文件代碼的第54行去看看吧。

一看代碼,把我高興壞了,這不就是我猜測的結果么。通過函數的入參 isArkApp 進行選擇的。那就繼續找isArkApp 這個參數怎么來的吧。

第四步,確定 isArkApp 參數來源。

繼續發揮 find 命令的強大,搜索函數在哪里調用的。

結果是在同一個文件類調用的,查看源碼,發現還是AceContainer類里面一個 isArkApp_ 自由布爾變量。

再次在源碼里面找,發現是在AceContainer類構造函數中初始化的。

那就在使用 find 命令繼續搜索哪里有調用AceContainer類這個構造函數吧。結果有點失望,沒有搜到有調用的地方。沒有那就認真看看代碼吧,發現是AceContainer類內部一個 CreateContainer 的靜態函數構造的AceContainer實例,isArkApp 這個參數也是從 CreateContainer 函數傳進來的。

有了突破口,那就又繼續 find 吧(真的很強大啊)。

結果顯示在ace_ability.cpp文件的第256行代碼有調用。

查看源碼,找到了 isArkApp 參數的來源,是 GetIsArkFromConfig 這個函數的返回值。

第五步,查看GetIsArkFromConfig函數的代碼。

GetIsArkFromConfig 這個函數在 utils.h 文件中,實現如下所示,展示了關鍵代碼:

inline bool GetIsArkFromConfig(const std::string& packagePathStr)
{
auto configPath = packagePathStr + std::string("config.json");
//·····此處省略100字·····
std::string jsonString(jsonStream.get(), jsonStream.get() + size);
auto rootJson = JsonUtil::ParseJsonString(jsonString);
auto module = rootJson->GetValue("module");
auto distro = module->GetValue("distro");
std::string virtualMachine = distro->GetString("virtualMachine");
return virtualMachine.find("ark") != std::string::npos;
}

從上述代碼中可以看出,是解析的hap中的config.json文件中的內容,通過module/distro結構中的 virtualMachine 字段的值中是否包含有 ark 字符串來判斷的。至此,我們就找了OpenHarmony是怎么識別ARK應用的依據了。

第六步,解析Hap包確認config.json文件內容。

自己使用DevEco Studio開發了一個Demo應用,并打包成Hap包,再直接使用解壓工具解壓Hap文件,查看其中的config.json文件內容,內容如下:

distro對象中確實存在一個 virtualMachine 字段,而且內容為 ark0.0.0.2。但是實際上,寫代碼的時候config.json文件中的distro并沒有添加 virtualMachine 字段。如下所示:

所以可以得出,virtualMachine 這個字段是 DevEco Studio 開發工具編譯打包期間,自動添加進去的。

總結

當前 DevEco Studio 開發工具開發的OpenHarmony應用程序,已經默認編譯打包成了 Ark 應用。不需要開發人員手動設置。

疑問:DevEco Studio 開發工具已經默認OpenHarmony應用程序為Ark應用,那系統中的QuickJS還有用處嗎?

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2023-03-01 14:55:09

2022-03-02 16:08:31

Harmony應用開發鴻蒙

2013-07-19 15:31:20

移動應用僵尸

2023-04-17 16:14:55

靜態訂閱鴻蒙

2012-02-01 16:32:32

2011-11-25 10:47:32

大數據企業創新

2022-09-21 14:58:11

OH應用簽名鴻蒙

2013-06-04 21:50:42

云計算應用

2022-02-21 14:49:26

OpenHarmon操作系統鴻蒙

2022-04-29 14:56:40

通話應用源碼剖析

2022-11-04 14:58:59

應用開發鴻蒙

2022-11-25 16:27:07

應用開發鴻蒙

2023-05-23 14:53:26

鴻蒙應用開發

2022-10-08 16:19:40

智能喂食器鴻蒙

2024-03-26 15:25:55

應用接口文件轉換工具鴻蒙

2013-08-09 14:23:09

Android應用Android退出按鈕Android開發設計

2012-04-08 14:34:10

Android

2013-06-27 09:42:00

2021-11-18 10:28:03

鴻蒙HarmonyOS應用

2023-06-27 15:02:47

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品亚洲人成人网 | 电影午夜精品一区二区三区 | 羞视频在线观看 | 免费一区二区 | 亚洲午夜精品一区二区三区 | 午夜精品一区二区三区在线 | 97久久精品午夜一区二区 | 国产免费看 | 日本粉嫩一区二区三区视频 | 亚洲精品一区二区三区丝袜 | 亚洲成人精品免费 | 日韩精品极品视频在线观看免费 | 91久久久久 | 欧美日韩不卡 | 日韩电影免费观看中文字幕 | 国产一区二区影院 | 一区二区三区在线免费观看 | 在线观看国产www | 天天射影院 | 亚洲最新网址 | 青青久视频| 欧美国产日韩一区二区三区 | 爱高潮www亚洲精品 中文字幕免费视频 | 国内精品久久久久久久 | 久久精品国产精品青草 | 五月综合激情网 | 精品久久久久久久久久久久久久久久久 | 亚洲午夜精品 | 在线免费黄色小视频 | 日韩色综合 | 久久久久久一区 | 精品中文字幕在线 | 91婷婷韩国欧美一区二区 | 91久久精品一区二区二区 | 男女视频免费 | www.亚洲| jizz中国日本| 国产视频精品免费 | 91中文字幕| 久久久av| 99热播精品 |