本發(fā)明涉及EPG更新領(lǐng)域,具體涉及一種EPG熱更新系統(tǒng)及方法。
背景技術(shù):
:現(xiàn)有主流熱更新補(bǔ)丁框架,允許APP在不重新發(fā)布版本的情況下修復(fù)線上的bug。首先知道bug,修改生成一個補(bǔ)丁,在版本號相同的情況下,請求服務(wù)器有補(bǔ)丁,就會去下載。如果版本號不同,默認(rèn)的補(bǔ)丁會被刪除。通過修改內(nèi)部方法加載調(diào)用順序來完成補(bǔ)丁的加載完成.主要原理如下:我們知道Java在運(yùn)行時加載對應(yīng)的類是通過ClassLoader來實(shí)現(xiàn)的,ClassLoader本身是一個抽象來,Android中使用PathClassLoader類作為Android的默認(rèn)的類加載器,PathClassLoader其實(shí)實(shí)現(xiàn)的就是簡單的從文件系統(tǒng)中加載類文件。PathClassLoade本身繼承自BaseDexClassLoader,BaseDexClassLoader重寫了findClass方法,該方法是ClassLoader的核心。BaseDexClassLoader將findClass方法委托給了pathList對象的findClass方法,pathList對象是在BaseDexClassLoader的構(gòu)造函數(shù)中new出來的,它的類型是DexPathList。DexPathList對象中的dexElements列表是類加載的一個核心,一個類如果能被成功加載,那么它的dex一定會出現(xiàn)在dexElements所對應(yīng)的dex文件中,并且dexElements中出現(xiàn)的順序也很重要,在dexElements前面出現(xiàn)的dex會被優(yōu)先加載,通過調(diào)用element.dexFile對象上的loadClassBinaryName方法來加載類,一旦Class被加載成功,就會立即返回。要實(shí)現(xiàn)熱更新,就需要在運(yùn)行時去更改PathClassLoader.pathList.dexElements,由于這些屬性都是private的,因此需要通過反射來修改。另外,構(gòu)造自己的dex文件所對應(yīng)的dexElements數(shù)組的時候,有一個比較取巧的方式,就是通過構(gòu)造一個DexClassLoade對象來加載我們的dex文件,并且調(diào)用一次dexClassLoader.loadClass(dummyClassName);方法,這樣,dexClassLoader.pathList.dexElements中,就會包含我們的dex,通過把dexClassLoader.pathList.dexElements插入到系統(tǒng)默認(rèn)的classLoader.pathList.dexElements列表前面,就可以讓系統(tǒng)優(yōu)先加載我們的dex中的類,從而實(shí)現(xiàn)熱更新?,F(xiàn)有方法不足在于:1.對啟動速度略微有影響;2.不能對UI布局做動態(tài)修改;3.當(dāng)多次打補(bǔ)丁時,補(bǔ)丁次序可能會混亂;4.不同芯片方案可能需要不同的補(bǔ)丁。技術(shù)實(shí)現(xiàn)要素:本發(fā)明為了解決上述技術(shù)問題提供一種EPG熱更新裝置及方法。本發(fā)明通過下述技術(shù)方案實(shí)現(xiàn):EPG熱更新系統(tǒng),包括:JS打包系統(tǒng),包括由JS代碼編寫的JS運(yùn)行環(huán)境,用于打包index文件及資源文件并上傳服務(wù)器,在首次打包apk時生成默認(rèn)的index文件,所述apk中包括相關(guān)的布局組件及指向新的index文件的路徑;差分系統(tǒng),對比本地index文件及資源文件及打包的index文件及資源文件,重新打包新加入的index文件及資源文件,構(gòu)成新的index文件;版本管理系統(tǒng),根據(jù)版本的迭代進(jìn)行版本控制;index文件加載系統(tǒng),在需要更新時,控制加載顯示新的index文件。本發(fā)明目的在于打破原有的android原生開發(fā)模式,利用js代碼按照需求進(jìn)行相關(guān)的布局、邏輯編寫。其中,布局組件包括業(yè)務(wù)組件和flexbox盒子模型布局。JS打包系統(tǒng)的js運(yùn)行環(huán)境是由js代碼編寫,目的是用于解析項(xiàng)目中的js代碼,并配合我們apk中的jar包的android原生代碼及os文件來渲染出我們需要顯示的ui界面。利用本裝置,其能夠在不更新apk文件的情況下對apk進(jìn)行升級,包括ui的更新/代碼邏輯更新。要達(dá)到動態(tài)更新,則是通過補(bǔ)丁的方式進(jìn)行動態(tài)添加更新,采用本裝置,依舊是通過apk來進(jìn)行正常的啟動,然后再加載index文件,因此啟動速度與不進(jìn)行更新的apk速度幾乎一樣。采用本裝置,則可進(jìn)行view進(jìn)行動態(tài)的修改。基本原理:java層,通過JavaScriptModule接口類定義通信方法,并在代理攔截類JavaScriptModuleInvocationHandler中進(jìn)行統(tǒng)一處理發(fā)向Javascript的所有通信請求。C++層:OnLoad則是jni層的調(diào)用入口,注冊了所有的native方法,其內(nèi)部調(diào)用則是通過CountableBridge來完成的。Javascript層:BatchedBridge是Javascript層的調(diào)用入口,接收通信請求時,要先通過映射表確認(rèn)具體請求信息,再確認(rèn)Javascript組件是否可以被調(diào)用,最后再通過apply方式完成執(zhí)行。采用本裝置,則會通過生成index頁面進(jìn)行版本的迭代。多次迭代,則從新生成新的index文件即可,不會產(chǎn)生混亂現(xiàn)象。采用本裝置,則是統(tǒng)一的針對所有芯片盒子,不需要打針對于某個版本的補(bǔ)丁,只需要生成index文件即可。Apk只加載index文件,index文件則是由javaScript編寫,它可以針對所有的芯片盒子,因此不需要打多個補(bǔ)丁。作為優(yōu)選,所述版本管理系統(tǒng)在對迭代版本控制時,請求服務(wù)器下載新的index文件,若下載失敗或者解壓文件受損,則停止熱更新;若當(dāng)前版本有重大bug,則改變服務(wù)器接口數(shù)據(jù),不進(jìn)行重新下載并返回到上次的版本。一種EPG熱更新方法,包括以下步驟:JS打包系統(tǒng)首次打包apk并生成默認(rèn)index文件;檢測當(dāng)前版本是否需要熱更新;若需要熱更新,JS布局文件;JS打包系統(tǒng)打包index文件及資源文件;將打包的index文件及資源文件與本地的index文件及資源文件對比,重新打包新加入的index文件及資源文件,構(gòu)成新的index文件;加載并顯示新的index文件。作為優(yōu)選,所述JS打包系統(tǒng)包括由JS代碼編寫的JS運(yùn)行環(huán)境。作為優(yōu)選,所述布局組件包括業(yè)務(wù)組件和flexbox盒子模型布局。作為優(yōu)選,所述業(yè)務(wù)組件包括圖片組件、視頻組件、文字組件、選擇框組件和下拉框組件。本發(fā)明與現(xiàn)有技術(shù)相比,至少具有如下的優(yōu)點(diǎn)和有益效果:1、采用本發(fā)明的EPG熱更新裝置及方法,其對啟動速度沒影響;且可實(shí)現(xiàn)對UI布局的動態(tài)修改。2、采用本發(fā)明的EPG熱更新裝置及方法,其補(bǔ)丁不會受芯片方案的影響,且多次打補(bǔ)丁時,補(bǔ)丁次序不會發(fā)生混亂。具體實(shí)施方式本發(fā)明的裝置和方法支持所有手機(jī)、機(jī)頂盒和網(wǎng)絡(luò)電視等。為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下面結(jié)合實(shí)施例,對本發(fā)明作進(jìn)一步的詳細(xì)說明,本發(fā)明的示意性實(shí)施方式及其說明僅用于解釋本發(fā)明,并不作為對本發(fā)明的限定。實(shí)施例1EPG熱更新系統(tǒng),包括JS打包系統(tǒng)、差分系統(tǒng)、版本管理系統(tǒng)和index文件加載系統(tǒng);其中,所述JS打包系統(tǒng)包括首次打包apk,生成默認(rèn)的index文件,由JS代碼編寫的JS運(yùn)行環(huán)境,用于打包index文件及資源文件并上傳服務(wù)器,所述apk中包括相關(guān)的布局組件及指向新的index文件的路徑;所述差分系統(tǒng)對比本地index文件及資源文件及打包的index文件及資源文件,重新打包新加入的index文件及資源文件,構(gòu)成新的index文件;所述版本管理系統(tǒng)根據(jù)版本的迭代進(jìn)行版本控制;所述index文件加載系統(tǒng)在需要更新時,控制加載顯示新的index文件。所述版本管理系統(tǒng)在對迭代版本控制時,請求服務(wù)器下載新的index文件,若下載失敗或者解壓文件受損,則停止熱更新;若當(dāng)前版本有重大bug,則改變服務(wù)器接口數(shù)據(jù),不進(jìn)行重新下載并返回到上次的版本。實(shí)施例2一種EPG熱更新方法,包括以下步驟:JS打包系統(tǒng)首次打包apk時生成默認(rèn)index文件;檢測當(dāng)前版本是否需要熱更新;若需要熱更新,JS布局文件;JS打包系統(tǒng)打包index文件及資源文件;將打包的index文件及資源文件與本地的index文件及資源文件對比,重新打包新加入的index文件及資源文件,構(gòu)成新的index文件;加載并顯示新的index文件。所述JS打包系統(tǒng)包括由JS代碼編寫的JS運(yùn)行環(huán)境。所述布局組件包括業(yè)務(wù)組件和flexbox盒子模型布局。所述業(yè)務(wù)組件包括圖片組件、視頻組件、文字組件、選擇框組件和下拉框組件。以上所述的具體實(shí)施方式,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁1 2 3