本申請涉及通信領(lǐng)域,尤其涉及一種java函數(shù)與c函數(shù)的綁定方法及裝置。
背景技術(shù):
::在app的開發(fā)過程中,如果希望在javascript腳本中調(diào)用java函數(shù),通常會涉及到建立app的java類中的java函數(shù)與app的c文件中的c函數(shù)的綁定關(guān)系的操作。然而,目前在建立java函數(shù)與c函數(shù)的綁定關(guān)系時,需要開發(fā)人員指定需要綁定的java函數(shù)與c函數(shù),然后修改c函數(shù)的代碼,在c函數(shù)中注冊與java函數(shù)的對應(yīng)關(guān)系來實(shí)現(xiàn)綁定,操作較復(fù)雜。技術(shù)實(shí)現(xiàn)要素:本申請?zhí)岢鲆环Njava函數(shù)與c函數(shù)的綁定方法,該方法包括:將為目標(biāo)java類預(yù)定義的綁定接口基于引用傳遞至目標(biāo)c文件;其中,所述綁定接口包括所述目標(biāo)java類中目標(biāo)java函數(shù)的描述信息;在目標(biāo)c文件中調(diào)用所述綁定接口獲取所述目標(biāo)java函數(shù)的描述信息;基于所述描述信息建立所述目標(biāo)java函數(shù)與所述目標(biāo)c文件中的c函數(shù)之間的綁定關(guān)系??蛇x的,所述基于所述描述信息建立所述目標(biāo)java函數(shù)與所述目標(biāo)c文件中的c函數(shù)之間的綁定關(guān)系之前,所述方法還包括:從目標(biāo)html頁面中獲取javascript執(zhí)行代碼;基于預(yù)設(shè)的語法解析器針對所述javascript執(zhí)行代碼進(jìn)行語法解析;在所述c文件中生成與所述javascript執(zhí)行代碼對應(yīng)的c函數(shù)??蛇x的,所述方法包括:當(dāng)所述綁定關(guān)系建立完成后,在所述javascript執(zhí)行代碼中調(diào)用所述目標(biāo)java函數(shù),以將所述目標(biāo)html頁面轉(zhuǎn)換為native頁面在本地顯示??蛇x的,所述將為目標(biāo)java類預(yù)定義的綁定接口基于引用傳遞至目標(biāo)c文件包括:在目標(biāo)java類中調(diào)用預(yù)設(shè)的第一綁定函數(shù)將所述綁定接口的引用地址作為傳遞參數(shù)傳遞至所述目標(biāo)c文件中的第二綁定函數(shù)??蛇x的,所述綁定接口包括預(yù)定義的接口函數(shù),所述目標(biāo)java函數(shù)的描述信息基于json格式添加在所述接口函數(shù)中;所述在目標(biāo)c文件中調(diào)用所述綁定接口獲取所述目標(biāo)java函數(shù)的描述信息包括:在所述第二綁定函數(shù)中基于所述引用地址調(diào)用所述綁定接口;解析所述綁定接口的接口函數(shù),以獲取所述接口函數(shù)中預(yù)添加的所述目標(biāo)java函數(shù)的描述信息??蛇x的,所述語法解析器為duktape解析引擎。本申請還提出一種java函數(shù)與c函數(shù)的綁定裝置,該裝置包括:傳遞模塊,用于將為目標(biāo)java類預(yù)定義的綁定接口基于引用傳遞至目標(biāo)c文件;其中,所述綁定接口包括所述目標(biāo)java類中目標(biāo)java函數(shù)的描述信息;第一獲取模塊,用于在目標(biāo)c文件中調(diào)用所述綁定接口獲取所述目標(biāo)java函數(shù)的描述信息;綁定模塊,用于基于所述描述信息建立所述目標(biāo)java函數(shù)與所述目標(biāo)c文件中的c函數(shù)之間的綁定關(guān)系??蛇x的,所述裝置還包括:第二獲取模塊,用于從目標(biāo)html頁面中獲取javascript執(zhí)行代碼;解析模塊,用于基于預(yù)設(shè)的語法解析器針對所述javascript執(zhí)行代碼進(jìn) 行語法解析;生成模塊,用于在所述c文件中生成與所述javascript執(zhí)行代碼對應(yīng)的c函數(shù)??蛇x的,所述裝置還包括:調(diào)用模塊,用于在所述綁定關(guān)系建立完成后,在所述javascript執(zhí)行代碼中調(diào)用所述目標(biāo)java函數(shù),以將所述目標(biāo)html頁面轉(zhuǎn)換為native頁面在本地顯示??蛇x的,所述傳遞模塊具體用于:在目標(biāo)java類中調(diào)用預(yù)設(shè)的第一綁定函數(shù)將所述綁定接口的引用地址作為傳遞參數(shù)傳遞至所述目標(biāo)c文件中的第二綁定函數(shù)??蛇x的,所述綁定接口包括預(yù)定義的接口函數(shù),所述目標(biāo)java函數(shù)的描述信息基于json格式添加在所述接口函數(shù)中;所述第一獲取模塊具體用于:在所述第二綁定函數(shù)中基于所述引用地址調(diào)用所述綁定接口;解析所述綁定接口的接口函數(shù),以獲取所述接口函數(shù)中預(yù)添加的所述目標(biāo)java函數(shù)的描述信息。可選的,所述語法解析器為duktape解析引擎。本申請中,通過為目標(biāo)java類定義綁定接口,在綁定接口中添加待綁定的目標(biāo)java函數(shù)的描述信息,并將該綁定接口基于引用傳遞至目標(biāo)c文件,然后在目標(biāo)c文件中解析該綁定接口獲取目標(biāo)java函數(shù)的描述信息,并基于獲取到的描述信息建立目標(biāo)java函數(shù)與目標(biāo)c文件中的c函數(shù)之間的綁定關(guān)系,實(shí)現(xiàn)了在建立目標(biāo)java函數(shù)與c函數(shù)的綁定關(guān)系時,只需要為目標(biāo)java函數(shù)定義綁定接口并將該綁定接口基于引用傳遞至目標(biāo)c文件,就可以在目標(biāo)c文件中自動解析該綁定接口來實(shí)現(xiàn)目標(biāo)java函數(shù)與c函數(shù)的綁定,而不需要針對c函數(shù)的代碼執(zhí)行任何修改,從而可以降低建立java函數(shù)與c函數(shù)綁定關(guān)系的復(fù)雜度。附圖說明圖1是本申請一實(shí)施例提供的一種java函數(shù)與c函數(shù)的綁定方法的流程圖;圖2是本申請一實(shí)施例提供的一種通過javascript解析引擎針對html頁面中的javascript腳本進(jìn)行轉(zhuǎn)碼在目標(biāo)c文件中生成對應(yīng)的c函數(shù)的流程圖;圖3是本申請一實(shí)施例提供的一種java函數(shù)與c函數(shù)的綁定裝置的邏輯框圖;圖4是本申請一實(shí)施例提供的承載所述一種java函數(shù)與c函數(shù)的綁定裝置的客戶端的硬件結(jié)構(gòu)圖。具體實(shí)施方式在app(application,應(yīng)用)的開發(fā)過程中,通常會具有在javascript腳本中調(diào)用java函數(shù)的需求。例如,開發(fā)人員希望將基于javascript腳本創(chuàng)建的html(hypertextmarkuplanguage,超文本標(biāo)記語言)頁面,轉(zhuǎn)換成app支持的native頁面(app支持的以java為底層編程語言的原生頁面)在app中顯示時,則需要app能夠支持在javascript腳本中調(diào)用java函數(shù)。為了實(shí)現(xiàn)這種需求,通??梢酝ㄟ^javascript解析引擎對javascript腳本進(jìn)行轉(zhuǎn)碼,在app的c文件中生成與該javascript腳本對應(yīng)的c函數(shù),然后建立java類中需要被調(diào)用的java函數(shù)與該c函數(shù)的綁定關(guān)系。當(dāng)該綁定關(guān)系建立完成后,則可以在javascript腳本中直接調(diào)用該java函數(shù),從而可以將html頁面轉(zhuǎn)換為native頁面在app中顯示。然而,目前在建立java函數(shù)與c函數(shù)之間的綁定關(guān)系時,通常需要開發(fā)人員分別在app的java類以及c函數(shù)中分別指定待綁定的java函數(shù)以及c函數(shù),然后通過修改c函數(shù)的代碼,在c函數(shù)的代碼中注冊與java函數(shù)的對應(yīng)關(guān)系來實(shí)現(xiàn)綁定。由于在這種方案中,java類中待綁定的java函數(shù)會分別對應(yīng)一個c 文件中的c函數(shù),因此當(dāng)需要綁定的java函數(shù)和c函數(shù)數(shù)量較多時,需要開發(fā)人員逐一修改c函數(shù)的代碼,代碼冗余量較大,操作較復(fù)雜。有鑒于此,本申請?zhí)岢鲆环Njava函數(shù)與c函數(shù)的綁定方法,通過為目標(biāo)java類定義綁定接口,在綁定接口中添加待綁定的目標(biāo)java函數(shù)的描述信息,并將該綁定接口基于引用傳遞至目標(biāo)c文件,然后在目標(biāo)c文件中解析該綁定接口獲取目標(biāo)java函數(shù)的描述信息,并基于獲取到的描述信息建立目標(biāo)java函數(shù)與目標(biāo)c文件中的c函數(shù)之間的綁定關(guān)系,實(shí)現(xiàn)了在建立目標(biāo)java函數(shù)與c函數(shù)的綁定關(guān)系時,只需要為目標(biāo)java函數(shù)定義綁定接口并將該綁定接口基于引用傳遞至目標(biāo)c文件,就可以在目標(biāo)c文件中自動解析該綁定接口來實(shí)現(xiàn)目標(biāo)java函數(shù)與c函數(shù)的綁定,而不需要針對c函數(shù)的代碼執(zhí)行任何修改,從而可以降低建立java函數(shù)與c函數(shù)綁定關(guān)系的復(fù)雜度。下面通過具體實(shí)施例并結(jié)合具體的應(yīng)用場景對本申請進(jìn)行描述。請參考圖1,圖1是本申請一實(shí)施例提供的一種java函數(shù)與c函數(shù)的綁定方法,應(yīng)用于客戶端,所述方法執(zhí)行以下步驟:步驟101,將為目標(biāo)java類預(yù)定義的綁定接口基于引用傳遞至目標(biāo)c文件;其中,所述綁定接口包括所述目標(biāo)java類中目標(biāo)java函數(shù)的描述信息;步驟102,在目標(biāo)c文件中調(diào)用所述綁定接口獲取所述目標(biāo)java函數(shù)的描述信息;步驟103,基于所述描述信息建立所述目標(biāo)java函數(shù)與所述目標(biāo)c文件中的c函數(shù)之間的綁定關(guān)系。上述客戶端,可以包括面向用戶提供特定功能的客戶端軟件;例如,該客戶端軟件可以是用戶的智能終端上安裝的app。上述java類,是指app的源代碼中以java語言為編程語言的類文件(后綴名為.java的源文件);上述c文件,是指app的源代碼中以c語言為編程語言的類文件(后綴名為.c的源文件)。上述目標(biāo)java函數(shù),是指開發(fā)人員基于實(shí)際的業(yè)務(wù)需求,在目標(biāo)java類中指定的需要與目標(biāo)c文件中的c函數(shù)建立綁定關(guān)系的java函數(shù)。其中,以上需要建立綁定關(guān)系的java函數(shù)與c函數(shù)可以是功能相近,或者功能完全對等的函數(shù),從而當(dāng)二者的綁定關(guān)系建立完成后,可以通過互相調(diào)用,在不同的編程語言環(huán)境下實(shí)現(xiàn)相同的功能。在本例中,如果需要實(shí)現(xiàn)在javascript腳本中調(diào)用java函數(shù),將基于javascript腳本創(chuàng)建的html頁面轉(zhuǎn)換成app支持的native頁面在app中顯示,通??梢酝ㄟ^javascript解析引擎針對html頁面中的javascript腳本進(jìn)行轉(zhuǎn)碼,在目標(biāo)c文件中生成與該javascript腳本對應(yīng)的目標(biāo)c函數(shù),從而在通過步驟101至步驟103示出的技術(shù)方案,建立目標(biāo)java函數(shù)與該目標(biāo)c函數(shù)的綁定關(guān)系后,可以通過目標(biāo)java函數(shù)與該目標(biāo)c函數(shù)的互相調(diào)用,針對上述html頁面中的javascript腳本實(shí)現(xiàn)轉(zhuǎn)碼,將上述html頁面轉(zhuǎn)換為app支持的native頁面在app中進(jìn)行顯示。請參見圖2,圖2為本例中示出的通過javascript解析引擎針對html頁面中的javascript腳本進(jìn)行轉(zhuǎn)碼在目標(biāo)c文件中生成對應(yīng)的c函數(shù)的處理流程圖,包括以下執(zhí)行步驟:步驟201,從目標(biāo)html頁面中獲取javascript執(zhí)行代碼;在本例中,上述目標(biāo)html頁面可以是部署在服務(wù)端的html頁面,app可以通過與服務(wù)端進(jìn)行交互,將部署在服務(wù)端的html頁面“下拉”至本地;例如,可以主動向服務(wù)端請求html頁面,也可以由服務(wù)端主動推送html頁面。其中,上述服務(wù)端,可以是面向上述app提供服務(wù)端的服務(wù)器、服務(wù)器集群或者基于服務(wù)器集群構(gòu)建的云平臺;例如,在實(shí)現(xiàn)時,上述app可以是支付寶app,上述服務(wù)端可以是支付寶平臺,上述html頁面可以是用戶在支付寶app的頁面中執(zhí)行特定的支付操作后,支付寶app需要跳轉(zhuǎn)的支付頁面。在上述html頁面中,可以預(yù)先內(nèi)嵌javascript執(zhí)行代碼。上述app將該html頁面“下拉”至本地后,由于編程語言的不兼容,app通常無法在本地直接執(zhí)行html頁面中的javascript執(zhí)行代碼,將該html頁面在本地顯示。在這種情況下,app可以獲取該html頁面中內(nèi)嵌的javascript執(zhí)行代碼在本地 保存,然后針對該javascript執(zhí)行代碼執(zhí)行后續(xù)的轉(zhuǎn)碼操作,以將該html頁面轉(zhuǎn)換為app支持的native頁面。步驟202,基于預(yù)設(shè)的語法解析器針對所述javascript執(zhí)行代碼進(jìn)行語法解析;在本例中,上述語法解析器可以是app預(yù)設(shè)的javascript解析引擎。其中,該javascript解析引擎可以是duktape解析引擎。duktape解析引擎是一款主流的javascript嵌入式開源引擎,其自身可以充當(dāng)語法解析器對javascript執(zhí)行語法解析,將javascript執(zhí)行代碼嵌入c文件中。app可以通過duktape解析引擎針對從目標(biāo)html頁面中獲取到的javascript執(zhí)行代碼進(jìn)行語法解析,以解析出該javascript執(zhí)行代碼的語法。步驟203,在所述c文件中生成與所述javascript執(zhí)行代碼對應(yīng)的c函數(shù)。當(dāng)app通過duktape解析引擎完成針對上述javascript執(zhí)行代碼的語法解析后,可以根據(jù)解析出的該javascript執(zhí)行代碼的語法在目標(biāo)c文件的內(nèi)存中,生成與該javascript執(zhí)行代碼對應(yīng)的c函數(shù),從而可以實(shí)現(xiàn)將目標(biāo)html頁面中的javascript執(zhí)行代碼嵌入目標(biāo)c文件的目的。當(dāng)app利用duktape解析引擎,在目標(biāo)c文件中生成了與目標(biāo)html頁面中的javascript執(zhí)行代碼對應(yīng)的c函數(shù)后,此時app可以基于步驟101至步驟103中示出的技術(shù)方案,開始建立上述目標(biāo)java函數(shù)與目標(biāo)c文件中的上述c函數(shù)之間的綁定關(guān)系。在本例中,app在開始建立上述目標(biāo)java函數(shù)與目標(biāo)c文件中的上述c函數(shù)之間的綁定關(guān)系之前,app的開發(fā)人員可以為指定的目標(biāo)java類預(yù)先定義綁定接口。其中,該綁定接口,為開發(fā)人員為目標(biāo)java類定義的java接口。在上述綁定接口的結(jié)構(gòu)中,通常包含開發(fā)人員為該接口聲明的方法,以及該方法的描述信息。在本例中,開發(fā)人員在為上述綁定接口聲明方法時,可以在該方法中定義預(yù)先定義一個接口函數(shù),該接口函數(shù)可以是開發(fā)人員定義的java函數(shù),該 java函數(shù)用于攜帶目標(biāo)java類中需要進(jìn)行綁定的一個或者多個目標(biāo)java函數(shù)的描述信息。當(dāng)開發(fā)人員在上述綁定接口的方法中定義了上述接口函數(shù)后,可以將該目標(biāo)java類中需要進(jìn)行綁定的一個或者多個java函數(shù)的描述信息添加在該接口函數(shù)中。在示出的一種實(shí)施方式中,開發(fā)人員在該接口函數(shù)中添加需要綁定的目標(biāo)java函數(shù)的描述信息時,可以將描述信息以json格式添加至該接口函數(shù)中。json格式是一種流行的數(shù)據(jù)存儲格式,可以將數(shù)據(jù)以大字段的形式進(jìn)行存儲,具有存儲的數(shù)據(jù)便于解析的特點(diǎn)。因此,將目標(biāo)java函數(shù)的描述信息以json格式存儲至上述接口函數(shù)中,更加利于app后續(xù)對存儲的描述信息進(jìn)行解析。例如,開發(fā)人員可以通過編輯如下代碼來為目標(biāo)java類定義綁定接口:publicinterfacescriptable;publicstringgetscriptconfigjson();{“count”:2,“array”:[{“javamethod”:“method1”},{“javamethod”:“method2”}],“name”:“javawindow”}在以上代碼中,javawindow為目標(biāo)java類,scriptable為開發(fā)人員為目標(biāo)java類javawindow定義的綁定接口;以上第二行代碼即為該綁定接口scriptable中包含的方法,在該方法中,getscriptconfigjson即為開發(fā)人員定義的接口函數(shù)。以上第三第四行代碼即為開發(fā)人員為接口函數(shù)getscriptconfigjson添加的json格式的需要綁定的目標(biāo)java函數(shù)的描述信息,在上述描述信息中method1和method2即為待綁定的目標(biāo)java函數(shù)。在本例中,當(dāng)開發(fā)人員為目標(biāo)java類定義了綁定接口后,app可以利用java體系中的參數(shù)傳遞機(jī)制,基于引用將該綁定接口傳遞至目標(biāo)c文件,以使得可以在目標(biāo)c文件中調(diào)用該綁定接口來獲取該綁定接口中的上述描述信息。其中,基于java體系的參數(shù)傳遞機(jī)制,app在基于引用將該綁定接口傳遞至目標(biāo)c文件時,可以將該綁定接口在內(nèi)存中的引用地址作為傳遞參數(shù)傳遞至目標(biāo)c文件。在示出的一種實(shí)施方式中,當(dāng)app在啟動時,可以在目標(biāo)java類中調(diào)用預(yù)設(shè)的第一綁定函數(shù)(java函數(shù)),將上述綁定接口的引用地址作為傳遞參數(shù),傳遞至目標(biāo)c文件中的第二綁定函數(shù)(c函數(shù))。其中,上述第一綁定函數(shù)為目標(biāo)java類中的native函數(shù),用于對目標(biāo)c文件中的第二綁定函數(shù)進(jìn)行調(diào)用。當(dāng)app通過在目標(biāo)java類中調(diào)用預(yù)設(shè)的第一綁定函數(shù),將上述綁定接口的引用地址作為傳遞參數(shù),傳遞至目標(biāo)c文件中的第二綁定函數(shù)后,app可以在目標(biāo)c文件中調(diào)用該綁定接口來獲取需要綁定的目標(biāo)java函數(shù)的描述信息。其中,app在目標(biāo)c文件中調(diào)用該綁定接口來獲取目標(biāo)java函數(shù)的描述信息,可以通過上述第二綁定函數(shù)來實(shí)現(xiàn)。在這種情況下,由于上述綁定接口的引用地址已由上述第一綁定函數(shù)傳遞至上述第二綁定函數(shù)本地,app可以在目標(biāo)c文件中調(diào)用上述第二綁定函數(shù),在第二綁定函數(shù)中基于上述綁定接口的引用地址來調(diào)用上述綁定接口,并在第二綁定函數(shù)中執(zhí)行該綁定接口中聲明的方法,通過自動解析該方法中的接口函數(shù),來獲取開發(fā)人員為該接口函數(shù)預(yù)添加的json格式的上述需要綁定的目標(biāo)java函數(shù)的描述信息。例如,在實(shí)現(xiàn)時,上述第一綁定函數(shù)可以為目標(biāo)java類中的bindjavatoc函數(shù),上述第一綁定函數(shù)為目標(biāo)c文件中的bind函數(shù)(java體系已有的綁定機(jī)制決定);其中,上述bindjavatoc函數(shù)為目標(biāo)java類中的native函數(shù),用于調(diào)用目標(biāo)c文件中的bind函數(shù)。app在基于引用傳遞上述綁定接口至目標(biāo)c文件時,可以調(diào)用bindjavatoc函數(shù),將上述綁定接口的引用地址作為傳遞參數(shù),傳遞至目標(biāo)c文件中的bind函數(shù)。假設(shè)上述目標(biāo)java類為javawindow,上述綁定接口為scriptable,上述接口函數(shù)為getscriptconfigjson,當(dāng)參數(shù)傳遞完成后,app可以在目標(biāo)c文件中調(diào)用bind函數(shù),執(zhí)行上述綁定接口中聲明的方法,并解析該方法中的接口函 數(shù)getscriptconfigjson,來獲取開發(fā)人員為該接口函數(shù)getscriptconfigjson預(yù)添加的需要綁定的目標(biāo)java函數(shù)的描述信息。在本例中,當(dāng)app通過解析上述接口函數(shù),獲取到開發(fā)人員為上述接口函數(shù)預(yù)添加的目標(biāo)java函數(shù)的描述信息后,后續(xù)可以基于獲取到的該描述信息,在目標(biāo)c文件的內(nèi)存中記錄在該描述信息中由開發(fā)人員指定的目標(biāo)java函數(shù)與上述目標(biāo)c文件中的c函數(shù)之間的對應(yīng)關(guān)系,以完成目標(biāo)java函數(shù)與上述目標(biāo)c文件中的c函數(shù)之間綁定關(guān)系的建立。例如,假設(shè)上述目標(biāo)java函數(shù)的描述信息為:{“count”:2,“array”:[{“javamethod”:“method1”},{“javamethod”:“method2”}],“name”:“javawindow”}基于以上描述信息,method1和method2即為待綁定的目標(biāo)java函數(shù),app可以在目標(biāo)c文件的內(nèi)存中記錄目標(biāo)java函數(shù)method1和method2與該目標(biāo)c文件中的c函數(shù)的對應(yīng)關(guān)系,完成該目標(biāo)c文件中的c函數(shù)與上述目標(biāo)java函數(shù)method1和method2之間綁定關(guān)系的建立??梢?,通過這種方式,在建立目標(biāo)java函數(shù)與c函數(shù)的綁定關(guān)系時,開發(fā)人員只需要為目標(biāo)java函數(shù)定義綁定接口,并在該綁定接口中添加目標(biāo)java函數(shù)的描述信息,就可以在目標(biāo)c文件中自動解析該綁定接口來實(shí)現(xiàn)目標(biāo)java函數(shù)與c函數(shù)的綁定。整個綁定過程中,開發(fā)人員不再需要針對c函數(shù)的代碼執(zhí)行任何修改,從而可以減少代碼的冗余量,降低建立java函數(shù)與c函數(shù)綁定關(guān)系的復(fù)雜度。另外,需要說明的是:在實(shí)際應(yīng)用中,一方面,當(dāng)目標(biāo)java類中新增了需要與c函數(shù)建立綁定關(guān)系的目標(biāo)java函數(shù),開發(fā)人員也可以對上述描述信息中的目標(biāo)java函數(shù)進(jìn)行更新,app在啟動后,可以重復(fù)執(zhí)行以上過程,在目標(biāo)c文件中自動解析該綁定接口來實(shí)現(xiàn)目標(biāo)java函數(shù)與c函數(shù)的綁定。另一方面,當(dāng)app中新增了java類,并且該java類中存在需要與c函數(shù)建立綁定關(guān)系的java函數(shù)時,開發(fā)人員則只需要為該java類定義綁定接 口,然后為app更新版本,使得app在啟動后,也可以重復(fù)執(zhí)行以上過程,在目標(biāo)c文件中自動解析該綁定接口來實(shí)現(xiàn)目標(biāo)java函數(shù)與c函數(shù)的綁定。在本例中,當(dāng)上述目標(biāo)java函數(shù)與目標(biāo)c文件中的c函數(shù)的綁定關(guān)系建立完成之后,app中目標(biāo)java類中的目標(biāo)java函數(shù)已能夠正常的與目標(biāo)c文件中的c函數(shù)進(jìn)行互相調(diào)用。而且,由于此時目標(biāo)c文件的c函數(shù)中包括app通過javascript解析引擎針對html頁面中的javascript腳本進(jìn)行語法解析后,在目標(biāo)c文件中生成的與html頁面中的javascript腳本對應(yīng)的c函數(shù),因此app可以通過目標(biāo)java函數(shù)與目標(biāo)c文件中的c函數(shù)之間的互相調(diào)用,來實(shí)現(xiàn)在上述目標(biāo)html頁面中的javascript腳本中調(diào)用目標(biāo)java函數(shù)。在這種情況下,app可以通過在上述目標(biāo)html頁面中的javascript腳本中調(diào)用目標(biāo)java函數(shù),完成對上述javascript腳本的轉(zhuǎn)碼,將上述html頁面轉(zhuǎn)換為app支持的native頁面在app中進(jìn)行顯示。在以上實(shí)施例中,通過為目標(biāo)java類定義綁定接口,在綁定接口中添加待綁定的目標(biāo)java函數(shù)的描述信息,并利用java體系現(xiàn)有的參數(shù)傳遞機(jī)制,將該綁定接口基于引用傳遞至目標(biāo)c文件,然后在目標(biāo)c文件中自動解析該綁定接口獲取目標(biāo)java函數(shù)的描述信息,基于獲取到的描述信息來建立目標(biāo)java函數(shù)與目標(biāo)c文件中的c函數(shù)之間的綁定關(guān)系,實(shí)現(xiàn)了在建立目標(biāo)java函數(shù)與c函數(shù)的綁定關(guān)系時,只需要為目標(biāo)java函數(shù)定義綁定接口并將該綁定接口基于引用傳遞至目標(biāo)c文件,就可以在目標(biāo)c文件中自動解析該綁定接口來實(shí)現(xiàn)目標(biāo)java函數(shù)與c函數(shù)的綁定,而不需要針對c函數(shù)的代碼執(zhí)行任何修改,從而可以降低建立java函數(shù)與c函數(shù)綁定關(guān)系的復(fù)雜度。與上述方法實(shí)施例相對應(yīng),本申請還提供了裝置的實(shí)施例。請參見圖3,本申請?zhí)岢鲆环Njava函數(shù)與c函數(shù)的綁定裝置30,應(yīng)用于客戶端;其中,請參見圖4,作為承載所述java函數(shù)與c函數(shù)的綁定裝置30的客戶端所涉及的硬件架構(gòu)中,通常包括cpu、內(nèi)存、非易失性存儲器、網(wǎng)絡(luò)接口以及內(nèi)部總線等;以軟件實(shí)現(xiàn)為例,所述java函數(shù)與c函數(shù)的綁定裝置30通??梢岳斫鉃榧虞d在內(nèi)存中的計算機(jī)程序,通過cpu運(yùn)行之后形成 的軟硬件相結(jié)合的邏輯裝置,所述裝置30包括:傳遞模塊301,用于將為目標(biāo)java類預(yù)定義的綁定接口基于引用傳遞至目標(biāo)c文件;其中,所述綁定接口包括所述目標(biāo)java類中目標(biāo)java函數(shù)的描述信息;第一獲取模塊302,用于在目標(biāo)c文件中調(diào)用所述綁定接口獲取所述目標(biāo)java函數(shù)的描述信息;綁定模塊303,用于基于所述描述信息建立所述目標(biāo)java函數(shù)與所述目標(biāo)c文件中的c函數(shù)之間的綁定關(guān)系。在本例中,所述裝置30還包括:第二獲取模塊304,用于從目標(biāo)html頁面中獲取javascript執(zhí)行代碼;解析模塊305,用于基于預(yù)設(shè)的語法解析器針對所述javascript執(zhí)行代碼進(jìn)行語法解析;生成模塊306,用于在所述c文件中生成與所述javascript執(zhí)行代碼對應(yīng)的c函數(shù)。在本例中,所述裝置30還包括:調(diào)用模塊307,用于在所述綁定關(guān)系建立完成后,在所述javascript執(zhí)行代碼中調(diào)用所述目標(biāo)java函數(shù),以將所述目標(biāo)html頁面轉(zhuǎn)換為native頁面在本地顯示。在本例中,所述傳遞模塊301具體用于:在目標(biāo)java類中調(diào)用預(yù)設(shè)的第一綁定函數(shù)將所述綁定接口的引用地址作為傳遞參數(shù)傳遞至所述目標(biāo)c文件中的第二綁定函數(shù)。在本例中,所述綁定接口包括預(yù)定義的接口函數(shù),所述目標(biāo)java函數(shù)的描述信息基于json格式添加在所述接口函數(shù)中;所述第一獲取模塊302具體用于:在所述第二綁定函數(shù)中基于所述引用地址調(diào)用所述綁定接口;解析所述綁定接口的接口函數(shù),以獲取所述接口函數(shù)中預(yù)添加的所述目標(biāo)java函數(shù)的描述信息。在本例中,所述語法解析器為duktape解析引擎。本領(lǐng)域技術(shù)人員在考慮說明書及實(shí)踐這里公開的發(fā)明后,將容易想到本申請的其它實(shí)施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本申請的一般性原理并包括本申請未公開的本
技術(shù)領(lǐng)域:
:中的公知常識或慣用技術(shù)手段。說明書和實(shí)施例僅被視為示例性的,本申請的真正范圍和精神由下面的權(quán)利要求指出。應(yīng)當(dāng)理解的是,本申請并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本申請的范圍僅由所附的權(quán)利要求來限制。以上所述僅為本申請的較佳實(shí)施例而已,并不用以限制本申請,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請保護(hù)的范圍之內(nèi)。當(dāng)前第1頁12當(dāng)前第1頁12