一種客戶端應(yīng)用程序局部更新方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件技術(shù)領(lǐng)域,尤其涉及一種客戶端應(yīng)用程序局部更新方法及裝置。
【背景技術(shù)】
[0002]智能終端的普及不僅推動(dòng)了移動(dòng)互聯(lián)網(wǎng)的發(fā)展,也帶來了客戶端應(yīng)用程序的爆炸式增長。客戶端應(yīng)用程序是安裝在智能終端上的應(yīng)用程序,為用戶提供上網(wǎng)、娛樂、商務(wù)和生活事件處理等功能。為了吸引用戶,提高用戶體驗(yàn),客戶端應(yīng)用程序供應(yīng)商不斷開發(fā)新的客戶端應(yīng)用程序,或者對客戶端應(yīng)用程序不斷添加新的功能。但在客戶端應(yīng)用程序的快速迭代開發(fā)中,經(jīng)常會遇到由于測試不到位或者測試用例覆蓋不全,導(dǎo)致客戶端應(yīng)用程序發(fā)布后才暴露出問題,或者后期服務(wù)端業(yè)務(wù)邏輯發(fā)生變更導(dǎo)致客戶端應(yīng)用程序的功能不可用,此時(shí)就不可避免地要對客戶端應(yīng)用程序進(jìn)行更新。
[0003]客戶端應(yīng)用程序的更新一般分為兩種:一種是全量更新,即重新發(fā)布一個(gè)完整的客戶端應(yīng)用程序版本,用戶安裝新的客戶端應(yīng)用程序來實(shí)現(xiàn)更新,但這種方式過程繁瑣,更新周期長,適用于客戶端應(yīng)用程序改動(dòng)很大的情況;另一種是局部更新,只對客戶端應(yīng)用程序的部分代碼進(jìn)行替換,這種方式過程簡單,時(shí)間短,適用于客戶端應(yīng)用程序改動(dòng)少的情況,這也是客戶端應(yīng)用程序最常出現(xiàn)的情況。
[0004]對基于Android系統(tǒng)(安卓)的智能終端而言,客戶端應(yīng)用程序使用java語言開發(fā)。最常用的局部更新技術(shù)便是使用Java的類動(dòng)態(tài)加載技術(shù),亦即使用Google公司提供的兩個(gè)ClassLoader (類加載)類來實(shí)現(xiàn)類的加載替換,從而實(shí)現(xiàn)客戶端應(yīng)用程序的局部更新,這種方式雖然簡單,但是只能做到類(Class)級別的替換。
【發(fā)明內(nèi)容】
[0005]本申請?zhí)峁┮环N客戶端應(yīng)用程序局部更新方法及裝置,使得客戶端應(yīng)用程序的局部更新更為便利。
[0006]根據(jù)本申請實(shí)施例的第一方面,提供一種客戶端應(yīng)用程序局部更新方法,包括:
[0007]客戶端應(yīng)用程序?qū)ava目標(biāo)方法傳遞至本地層;
[0008]在本地層保存所述Java目標(biāo)方法,將JNI本地回調(diào)方法與所述Java目標(biāo)方法進(jìn)行關(guān)聯(lián);
[0009]客戶端應(yīng)用程序在虛擬機(jī)上運(yùn)行時(shí),根據(jù)所述JNI本地回調(diào)方法調(diào)用所述Java目標(biāo)方法。
[0010]可選的,所述的客戶端應(yīng)用程序局部更新方法,還包括:
[0011]客戶端應(yīng)用程序?qū)⒋鎿Q的Java方法傳遞至本地層;
[0012]在本地層保存所述待替換的Java方法,將JNI本地回調(diào)方法與所述待替換的Java方法進(jìn)行關(guān)聯(lián);
[0013]客戶端應(yīng)用程序在虛擬機(jī)上運(yùn)行時(shí),當(dāng)需要返回待替換的Java方法時(shí),根據(jù)所述JNI本地回調(diào)方法調(diào)用所述待替換的Java方法。
[0014]可選的,客戶端應(yīng)用程序使用鉤子方法將Java目標(biāo)方法和待替換的Java方法傳遞至本地層。
[0015]可選的,所述的客戶端應(yīng)用程序局部更新方法,在客戶端應(yīng)用程序?qū)ava目標(biāo)方法傳遞至本地層之前,還包括:
[0016]當(dāng)客戶端應(yīng)用程序查詢到存在方法的更新時(shí),從更新包中獲取Java目標(biāo)方法。
[0017]其中,根據(jù)所述JNI本地回調(diào)方法調(diào)用所述Java目標(biāo)方法,包括:
[0018]調(diào)用所述JNI本地回調(diào)方法,獲取待替換的Java方法或者Java目標(biāo)方法的回調(diào)函數(shù);
[0019]所述回調(diào)函數(shù)調(diào)用所述待替換的Java方法或者所述Java目標(biāo)方法。
[0020]根據(jù)本申請實(shí)施例的第二方面,提供一種客戶端應(yīng)用程序局部更新裝置,包括:
[0021]客戶端應(yīng)用程序方法傳遞模塊,用于將Java目標(biāo)方法傳遞至本地層;
[0022]方法保存模塊,在本地層保存所述Java目標(biāo)方法;
[0023]JNI本地回調(diào)方法模塊,用于將JNI本地回調(diào)方法與所述Java目標(biāo)方法進(jìn)行關(guān)聯(lián);
[0024]客戶端應(yīng)用程序調(diào)用模塊,用于客戶端應(yīng)用程序在虛擬機(jī)上運(yùn)行時(shí),根據(jù)所述JNI本地回調(diào)方法調(diào)用所述Java目標(biāo)方法。
[0025]可選的,所述客戶端應(yīng)用程序方法傳遞模塊,還用于將待替換的Java方法傳遞至本地層;
[0026]所述方法保存模塊,還用于在本地層保存所述待替換的Java方法;
[0027]所述JNI本地回調(diào)方法模塊,還用于將JNI本地回調(diào)方法與所述待替換的Java方法進(jìn)彳T關(guān)聯(lián);
[0028]所述客戶端應(yīng)用程序調(diào)用模塊,還用于客戶端應(yīng)用程序在虛擬機(jī)上運(yùn)行,當(dāng)需要返回待替換的Java方法時(shí),根據(jù)所述JNI本地回調(diào)方法調(diào)用所述待替換的Java方法。
[0029]可選的,所述客戶端應(yīng)用程序方法傳遞模塊使用鉤子方法將Java目標(biāo)方法和待替換的Java方法傳遞至本地層。
[0030]可選的,所述的客戶端應(yīng)用程序局部更新裝置,還包括:
[0031]客戶端應(yīng)用程序更新查詢模塊,用于查詢客戶端應(yīng)用程序是否需要進(jìn)行更新;
[0032]客戶端應(yīng)用程序方法獲取模塊,用于當(dāng)客戶端應(yīng)用程序更新查詢模塊查詢到存在方法的更新時(shí),從更新包中獲取Java目標(biāo)方法。
[0033]可選的,所述客戶端應(yīng)用程序調(diào)用模塊,包括:
[0034]回調(diào)方法調(diào)用子模塊,用于調(diào)用所述JNI本地回調(diào)方法,獲取待替換的Java方法或者Java目標(biāo)方法的回調(diào)函數(shù);
[0035]回調(diào)子模塊,用于使用所述回調(diào)函數(shù)調(diào)用所述待替換的Java方法或所述Java目標(biāo)方法。
[0036]本申請實(shí)施例提供的技術(shù)方案可以包括以下有益效果:利用Android系統(tǒng)框架的特性和JNI機(jī)制,客戶端應(yīng)用程序從更新包獲取用于Java目標(biāo)方法后,將Java目標(biāo)方法傳遞至本地層并保存,并將Java目標(biāo)方法與JNI本地回調(diào)方法關(guān)聯(lián),所述JNI本地回調(diào)方法用于存儲Java目標(biāo)方法的回調(diào)函數(shù),所述回調(diào)函數(shù)保存Java目標(biāo)方法的函數(shù)指針。由此當(dāng)客戶端應(yīng)用程序在Dalvik虛擬機(jī)上運(yùn)行,需要調(diào)用待替換的Java方法時(shí),不再調(diào)用原始的待替換的Java方法,而是調(diào)用JNI本地回調(diào)方法,JNI本地回調(diào)方法根據(jù)客戶端應(yīng)用程序傳入的參數(shù)查找對應(yīng)的Java目標(biāo)方法的回調(diào)函數(shù),所述回調(diào)函數(shù)根據(jù)Java目標(biāo)方法的函數(shù)指針,調(diào)用所述Java目標(biāo)方法,完成對客戶端應(yīng)用程序代碼的局部更新。本申請?zhí)岢龅目蛻舳藨?yīng)用程序代碼局部更新方法,可以精準(zhǔn)到Java類的方法(Method)級別,而且不需加入額外的腳本或橋接代碼,能保持和原生開發(fā)相同的性能。
[0037]應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本申請。
【附圖說明】
[0038]為了更清楚地說明本申請實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,對于本領(lǐng)域普通技術(shù)人員而言,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0039]圖1為本申請一示例性實(shí)施例示出的一種客戶端應(yīng)用程序局部更新方法的流程示意圖。
[0040]圖2為本申請另一示例性實(shí)施例示出的一種客戶端應(yīng)用程序局部更新方法的流程TJK意圖。
[0041]圖3為本申請一示例性實(shí)施例示出的一種客戶端應(yīng)用程序局部更新裝置的框圖。
[0042]圖4為本申請另一示例性實(shí)施例示出的一種客戶端應(yīng)用程序局部更新裝置的框圖。
【具體實(shí)施方式】
[0043]這里將詳細(xì)地對示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
[0044]為了全面理解本申請,在以下詳細(xì)描述中提到了眾多具體的細(xì)節(jié),但是本領(lǐng)域技術(shù)人員應(yīng)該理解,本申請可以無需這些具體細(xì)節(jié)而實(shí)現(xiàn)。在其他實(shí)施例中,不詳細(xì)描述公知的方法、過程、組件和裝置,以免不必要地導(dǎo)致實(shí)施例模糊。
[0045]為更好地理解