上一篇我們說(shuō)了環(huán)境搭建,以及注冊(cè)賬號(hào),把模擬器跑起來(lái),那么這一節(jié)就來(lái)看看,項(xiàng)目的目錄結(jié)構(gòu)。
1 項(xiàng)目結(jié)構(gòu)剖析
我們打開(kāi)項(xiàng)目,看到如下的目錄結(jié)構(gòu),如果你不細(xì)看,一眼望去,好像安卓,或者說(shuō)大致一模一樣。
上一節(jié)我們?nèi)タ戳司幾g出來(lái)的hap,用zip解壓出來(lái),會(huì)發(fā)現(xiàn)跟apk結(jié)構(gòu)類(lèi)似,
這里我們把classes.dex 和 entry_debug_signed_entry.apk 都來(lái)反編譯下,就能看出一些有趣的內(nèi)容,對(duì)于我們理解hap會(huì)有幫助。
classes.dex 反編譯的結(jié)構(gòu):
會(huì)發(fā)現(xiàn)這里面的
MainAbilitySlice extends AbilitySlice
MainAbility extends Ability
MyApplication extends AbilityPackage
這幾個(gè)都是在鴻蒙的jar包里面,我們繼續(xù)看entry_debug_signed_entry.apk的反編譯,這個(gè)里面會(huì)出現(xiàn)更多熟悉的內(nèi)容:
通過(guò)這個(gè)關(guān)系網(wǎng),就可以得出我們的應(yīng)用實(shí)際實(shí)現(xiàn)了一個(gè) ShellMyApplication類(lèi),來(lái)完成Application的相關(guān)工作。
然后我們又看到了:
MainAbilityShellActivity extends AbilityShellActivity ,這里的AbilityShellActivity
通過(guò)這塊分析,發(fā)現(xiàn)鴻蒙的框架,是對(duì)安卓框架做了一次封裝,Activity封裝成AbilityShellActivity,然后每個(gè)模塊又帶一個(gè)MainAbilityShellActivity。
同時(shí) Application 封裝成HarmonyApplication,然后每個(gè)模塊又帶一個(gè)ShellMyApplication。
于是,當(dāng)前的整個(gè)邏輯就變成如下的一個(gè)結(jié)構(gòu)(依據(jù)反編譯信息推出的一個(gè)架構(gòu),如有錯(cuò)漏,歡迎交流)
同時(shí)我簡(jiǎn)單設(shè)置了斷點(diǎn),可以清晰的看到調(diào)用關(guān)系:
然后我們?cè)倏聪?a target="_blank">SDK中提供的jar包,可以看到系統(tǒng)抽離出來(lái)了這幾個(gè):
那么我來(lái)總結(jié)下,鴻蒙系統(tǒng)在手機(jī)線(xiàn)的實(shí)現(xiàn),基本上是圍繞著封裝來(lái)做,將安卓原始的Activity,Provider,Service,Application,進(jìn)行封裝,從而解析一個(gè)叫做HAP的鴻蒙應(yīng)用包,完成解耦的動(dòng)作。
又扯遠(yuǎn)了,我們回過(guò)頭來(lái),看看項(xiàng)目結(jié)構(gòu):
config.json 可以類(lèi)比成AndroidManifest.xml
resources 跟安卓一樣,代表資源,只是目錄結(jié)構(gòu)有區(qū)別。
MyApplication extends AbilityPackage ,代表一個(gè)應(yīng)用。
MainAbility extends Ability,可以理解成Activity,但是更準(zhǔn)確的是沒(méi)有界面的一個(gè)抽象層,可以理解成Activity管理器。
MainAbilitySlice extends AbilitySlice,這個(gè)代表一個(gè)界面,這個(gè)可以對(duì)標(biāo)稱(chēng)Activity,一個(gè)顯示界面。
從實(shí)現(xiàn)上來(lái)分析,HarmonyOS ,實(shí)現(xiàn)了一個(gè)自己的Activity,叫做
AbilityShellActivity,在真正加載起來(lái)的時(shí)候,是MainAbilityShellActivity。
而 MainAbilityShellActivity 直接操作Ability ,Ability里面有多個(gè)AbilitySlice 。
我們開(kāi)發(fā)的時(shí)候,直接面對(duì)的就是Ability,生成出來(lái)就是hap文件了。關(guān)于里面的實(shí)現(xiàn),只需要了解下就行。
于是我們看下邏輯圖:
更多參考官方文檔:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/project_overview-0000001053822398
編輯:jq
-
編譯
+關(guān)注
關(guān)注
0文章
660瀏覽量
32927 -
SDK
+關(guān)注
關(guān)注
3文章
1041瀏覽量
46074 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2378瀏覽量
42938
原文標(biāo)題:王姨勸我學(xué)HarmonyOS鴻蒙2.0系列教程之二應(yīng)用知識(shí)&&梳理邏輯!
文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論