HarmonyOS Codelabs之Js2JavaCodegen JSFA調(diào)用PA工具
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
1.介紹
如何用JS FA簡單高效的調(diào)用PA能力?如果還不了解FA和PA概念的小伙伴可以點進鏈接去詳細了解一下。
今天使用js2java-codegen工具重新體驗了一把,嗯~,體驗不錯,來做個分享。
官方文檔指導(dǎo)說明:
JS FA(Feature Ability)調(diào)用PA (Particle Ability)是使用基于JS擴展的類Web開發(fā)范式的方舟開發(fā)框架所提供的一種跨語言能力調(diào)用的機制,用于建立JS能力與Java能力之間傳遞方法調(diào)用、處理數(shù)據(jù)返回以及訂閱事件上報的通道。開發(fā)者可以使用FA調(diào)用PA機制進行應(yīng)用開發(fā),但直接使用該機制需要開發(fā)者手動撰寫大量模板代碼,且模板代碼可能與業(yè)務(wù)代碼相互耦合,使得代碼可維護性和可讀性較差。
想要提升開發(fā)效率,開發(fā)者可以在DevEco Studio環(huán)境中借助js2java-codegen工具自動生成JS FA調(diào)用PA代碼(目前僅支持InternalAbility調(diào)用方式),快速完成FA調(diào)用PA應(yīng)用的開發(fā)。
接下來,通過一個簡易計算器的實例(界面JS FA實現(xiàn))看一下JS FA調(diào)用PA的開發(fā)步驟。
2.效果展示

3.搭建環(huán)境
安裝DevEco Studio,詳情請參考DevEco Studio下載。
設(shè)置DevEco Studio開發(fā)環(huán)境,DevEco Studio開發(fā)環(huán)境需要依賴于網(wǎng)絡(luò)環(huán)境,需要連接上網(wǎng)絡(luò)才能確保工具的正常使用,可以根據(jù)如下兩種情況來配置開發(fā)環(huán)境:
如果可以直接訪問Internet,只需進行下載HarmonyOS SDK操作。
如果網(wǎng)絡(luò)不能直接訪問Internet,需要通過代理服務(wù)器才可以訪問,請參考配置開發(fā)環(huán)境。
下載源碼后,使用DevEco Studio 打開項目,模擬器運行即可。
真機運行需要將config.json中的buddleName修改為自己的,如果沒有請到AGC上進行配置,參見 使用模擬器進行調(diào)試 。
4.項目結(jié)構(gòu)

5.步驟講解
5.1 配置js2java-codegen工具
工具會根據(jù)開發(fā)者提供的Java源碼生成JS與Java兩種語言的模板代碼,其中Java模板代碼用戶無需關(guān)心,而JS模板代碼需要用戶手動調(diào)用,因此用戶需要自主設(shè)置JS模板代碼的生成路徑。該參數(shù)位于ohos -> defaultConfig中,只需添加如下設(shè)置即可。
1.配置js代碼存放路徑 ----2.配置該工具開關(guān)

5.2 創(chuàng)建PA服務(wù)類,實現(xiàn)提供的服務(wù)接口
1.創(chuàng)建計算服務(wù)類(CalculateService.java) 并添加注解
注解有主要有3個,
@InternalAbility注解
類注解,用于被使用作InternalAbility的、包含實際業(yè)務(wù)代碼的類(簡稱InternalAbility類)。只支持文件中public的頂層類,不支持接口類和注解類。包含一個參數(shù):registerTo,值為需要注冊到的Ability類全名。
@ExportIgnore注解
方法注解,用于InternalAbility類中的某些方法,表示該方法不暴露給JS側(cè)來調(diào)用。僅對public方法有效。
@ContextInject注解
用于AbilityContext上的注解。該類由HarmonyOS的Java API提供,開發(fā)者可通過它獲取API中提供的信息。我們一些功能可能會用到上下文,這個注解幫我們把上下文自動注入進來了。

2.實現(xiàn)提供的服務(wù)接口
見上圖calculateResult函數(shù)。
5.3 調(diào)用工具編譯生成代碼
編譯方法:Build–Build Haps(s)/App(s)----Build Haps(s)
生成的代碼有兩份,一份Java代碼(CalculateServiceStub.java)

一份JS代碼在上面配置的目錄(CalculateService.js)

*// This file is automatically generated. Do not modify it!
5.4 編寫JS 代碼完成調(diào)用
1.在index.js 中引用生成的FA接口類 —2.創(chuàng)建FA接口實例----3.調(diào)用對應(yīng)方法

5.5 編寫頁面布局代碼(index.hml)

6.思考總結(jié)
1.通過js2java-codegen工具,讓js FA調(diào)用PA思路變的清晰,注解很簡單,生成代碼也很便捷。
2.完成業(yè)務(wù)功能,不用去關(guān)注生成的代碼。
7.完整代碼
附件可以直接下載
https://harmonyos.51cto.com/resource/1495
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)