自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

App與Hap、Entry與Feature,BundleName與Packge,務(wù)必弄明白

系統(tǒng) OpenHarmony
App與Hap,Entry與Feature,BundleName與Packge這幾個關(guān)鍵字是HarmonyOS入門基礎(chǔ)中必講的,也是我們最容易忽略的知識點。

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

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

前言

App與Hap,Entry與feature,bundleName與packge這幾個關(guān)鍵字是HarmonyOS入門基礎(chǔ)中必講的,也是我們最容易忽略的知識點,而又真需要用到它們時,往往又會因為沒完全弄明白它們的意思導(dǎo)致混淆不清,導(dǎo)致因為它們產(chǎn)生的問題而找不出原因。

因為前期在剛?cè)腴T的時候往往沒有它們的典型案例,特別是比較深的對比案例做演示,往往會導(dǎo)致對它們的理解不夠清晰。下面我就結(jié)合它們案例和具體因為它們導(dǎo)致的bug來做對比后詳細講解,相信大家看完我這篇文章之后會完全理解它們的重要作用了,也不會再輕視它們了。

App與Hap、Entry與feature

下面先直接引用官網(wǎng)的一段描述。

App與Hap、Entry與feature,bundleName與packge,務(wù)必弄明白-開源基礎(chǔ)軟件社區(qū)

App與Hap、Entry與feature,bundleName與packge,務(wù)必弄明白-開源基礎(chǔ)軟件社區(qū)

官網(wǎng)這小小的一段話,其實信息量還是很大的,特別是剛?cè)腴T的時候看這段話,往往會一知半解,所以好多知識是要反復(fù)咀嚼才行,即剛開始入門的時候看一遍,學(xué)到中途的時候涉及到相關(guān)知識再來看一遍,后面學(xué)到一定程度了再回頭復(fù)盤看一遍就會又有另一番滋味。

App包是我們最終使用DevEco Studio打包發(fā)布到華為應(yīng)用市場的軟件包,如何打包成App包呢,如下圖:

App與Hap、Entry與feature,bundleName與packge,務(wù)必弄明白-開源基礎(chǔ)軟件社區(qū)

打包之后的App包所在的位置如下圖:

App與Hap、Entry與feature,bundleName與packge,務(wù)必弄明白-開源基礎(chǔ)軟件社區(qū)

在哪里發(fā)布這個App包呢,如下圖:

App與Hap、Entry與feature,bundleName與packge,務(wù)必弄明白-開源基礎(chǔ)軟件社區(qū)

發(fā)布到應(yīng)用市場等待官方審核完成之后,你就可以在手機上通過應(yīng)用市場安裝該應(yīng)用了。

最后關(guān)于App包來個點睛的話:App包不能直接安裝到手機上運行,即不能通過hdc工具安裝,也不能拷貝到手機上之后點擊安裝,它僅僅用來向應(yīng)用商店發(fā)布。

那么我發(fā)布之前該如何進行調(diào)試呢?發(fā)布之前只能借助hap包來調(diào)試了。

我們在DevEco Studio中還可以build出hap,如果鼠標(biāo)選中單個module開始build,則只會構(gòu)建該module的hap包,如果選中整個工程project開始build,則工程下的所有module都會構(gòu)建hap包,hap包構(gòu)建完成之后的位置如下圖:

App與Hap、Entry與feature,bundleName與packge,務(wù)必弄明白-開源基礎(chǔ)軟件社區(qū)

App與Hap、Entry與feature,bundleName與packge,務(wù)必弄明白-開源基礎(chǔ)軟件社區(qū)

我的工程里面有兩個module,分別為entry和myapplication,而myapplication為feature類型,并且該feature是攜帶FA的。

?上面的entry和myapplication都攜帶了FA,即都有UI頁面,它們都可以在調(diào)試階段直接通過hdc工具安裝到手機上獨立運行調(diào)試,并且都有各自的UI頁面,但是我們安裝到手機上之后會發(fā)現(xiàn)一個重要區(qū)別,entry會在桌面上創(chuàng)建一個入口圖標(biāo),而feature是沒有入口圖標(biāo)的。也就是說Feature你沒法直接通過桌面入口去打開它的,它最終發(fā)布的時候會附加在整個App包中進行發(fā)布,發(fā)布之后可以通過在ability相關(guān)的api接口來調(diào)起來feature中的相關(guān)FA。

這里有個比較坑的點就是,由于feature和entry共用的同一個bundleName,而手機上同一個bundleName的應(yīng)用只能安裝一個,在調(diào)試階段每個hap都被當(dāng)做了一個獨立應(yīng)用,就導(dǎo)致了這兩個hap不能在手機上同時安裝,安裝一個就會自動先卸載掉另一個,但是在以app包發(fā)布之后是可以的,因為app包是一個獨立應(yīng)用(里面包含多個hap,正式發(fā)布之后獨立應(yīng)用是以app為單位的而不是hap了)。這里就會帶來一個實際項目生產(chǎn)中的大問題,比如我做了一個大項目應(yīng)用,里面有一個entry同時還會有很多feature,我調(diào)試階段同一個手機無法同時安裝這些entry和feature進行測試,而我打成app包又不能安裝到手機上進行測試,等發(fā)布到應(yīng)用商店之后再來測試那就更扯淡了。相信很多大廠在做HarmonyOS應(yīng)用開發(fā)的時候都遇到這個問題了吧。
這里我只能給個體驗感不太好的解決方案,那就是在調(diào)試階段給每個hap都取用不同的bundleName,以及代碼中需要使用的bundleName都要同步修改,待測試完成之后,在發(fā)布之前全部統(tǒng)一修改回同一個bundleName。?

bundleName與package

在上面已經(jīng)提到了bundleName的一個重要作用,下面就來具體分析下bundleName與package這兩個概念的對比以及坑點,防止大家混淆和入坑。

首先還是來看官網(wǎng)描述bundleName和package的解釋,如下圖:

App與Hap、Entry與feature,bundleName與packge,務(wù)必弄明白-開源基礎(chǔ)軟件社區(qū)

App與Hap、Entry與feature,bundleName與packge,務(wù)必弄明白-開源基礎(chǔ)軟件社區(qū)

官網(wǎng)說了bundleName是應(yīng)用的包名,如果是從java或者Android開發(fā)過來的朋友估計就暈了,會誤以為這不就是package嗎?

其實去掉它表示應(yīng)用的包名這句話就更好理解了,直接說它是應(yīng)用的唯一標(biāo)識符,即你的手機上不能同時安裝有兩個bundleName一樣的應(yīng)用。在Android開發(fā)從eclipse過度到Android studio開發(fā)之后,在gradle配置中加入了一個applicationId,這個bundleName其實是和applicationId對標(biāo)的。關(guān)于這個唯一標(biāo)識的作用,在上面講解App與Hap的時候已經(jīng)詳細講解了,這里就不再重復(fù)贅述了。

package是真正的包名,它是每個hap的包結(jié)構(gòu)名稱,同一個App下的bundleName相同,但是package名稱不同,這個就是我們通常java中提到的包名了,比如有一個類名為MainAbility,它所屬的包名為com.xdw.jstest,我們在好多api接口使用的時候經(jīng)常會調(diào)用完整類名,即com.xdw.jstest.MainAbility。下面就結(jié)合一個核心Js Api來講解bundleName和package結(jié)合使用的應(yīng)用場景,容易混淆出錯的地方。這里順帶提一下,從Api8之后HarmonyOS也完全拋棄java了,這里用的api也是8版本。

截取官網(wǎng)上的一個api使用描述,如下圖:

App與Hap、Entry與feature,bundleName與packge,務(wù)必弄明白-開源基礎(chǔ)軟件社區(qū)

以后遇到這種api就要長個心眼,下面abilityName中前面的那一長串是package,而不是bundleName,官網(wǎng)截圖中它們是同一串字符串,但是千萬不要誤以為它們必須一樣,在調(diào)用這類api的時候一定要仔細去module下的config.json文件中分別復(fù)制自己的bundleName和package,特別是最新的992版本的DevEco Studio開發(fā)工具在創(chuàng)建工程的時候只提供輸入bundleName的地方而不提供輸入package的地方,并且默認生成的package和bundleName是不一樣的,如果你這里想當(dāng)然的它們就是一樣的,那么調(diào)用上圖中的api的時候就會導(dǎo)致api無法生效。

小結(jié)

相信讀完全篇文檔之后,大家不會再對這些重要概念再混淆不清了吧。

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

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

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2024-05-16 12:24:53

2022-12-14 08:01:56

數(shù)據(jù)庫運維IO

2022-10-24 20:25:40

云原生SpringJava

2019-10-09 08:29:30

IPv6IP地址狀態(tài)

2023-12-27 08:16:54

Sessiontoken安全性

2011-12-12 14:06:11

APP營銷

2011-12-27 14:54:24

回顧app移動應(yīng)用

2012-11-19 11:13:22

IBMdw

2023-05-31 08:29:08

數(shù)據(jù)庫CPU類型

2024-01-25 09:10:10

GoRust標(biāo)準(zhǔn)庫

2023-09-08 18:57:42

MPPSMP節(jié)點

2022-12-28 18:31:43

Hive性能分布式表

2021-07-26 05:00:16

算法DfsBfs

2015-10-19 11:28:49

WebAPP未來

2015-04-30 11:26:38

HTML5與APP的抉

2012-04-26 13:28:28

2013-03-26 14:32:22

微信微信公眾平臺輕App

2022-12-31 08:17:02

2012-05-26 23:28:52

App

2023-03-03 16:38:28

JavaSpring框架
點贊
收藏

51CTO技術(shù)棧公眾號